使用properties-maven-plugin
配置如下:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<!-- 配置 ${generator.xxx} 的值 -->
<file>${basedir}/generator.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<scope>import</scope>
使用maven的如下配置:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${org.springframework.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
答案:
1)如果其中一个module改动了一点,且对这个parent下面的其他module兼容,则可以单独升级这个module;
2)如果这个改动导致 对其他module不兼容,则应该升级这个module及不兼容的其他所有module,以及parent。但是其他兼容的module可以不升级。
分析如下:
如果不全部升级,假设只升级了module A,假设项目依赖了module B,module B又依赖于parent和module A,
那么由于moudule B没有更新,所以项目仍然依赖于旧版本的module A,除非显式的声明对新版本module A的依赖。
假设module A依赖于module C,且新版module A依赖于新版module C,项目显式声明了对module A和module C的依赖,
此时,如果只升级module A而不升级module C,则会出问题。进一步假设项目显式声明了对module D的依赖,
而module D依赖于旧版本的module C,则module C无论升不升级,都会出问题。
如下所示:
原来的情况
PROJECT --> mA v1 + mD v1 ( + mC v1 )
mA v1 -- mC v1
mD v1 -- mC v1
升级后的情况
PROJECT --> mA v2 + mD v1 ( + mC v2 )
mA v2 -- mC v2
mD v1 -- mC v1
此时必须得升级 module D,让module D支持新版module C才行。
针对这种情况,解决方案是,将强依赖的几个组件单独放在一个parent中,每次升级都只升级parent,确保parent下所有的module都兼容即可。
因此,也建议 pom依赖粒度越粗、越模糊越好,将依赖的管理,交给下面的包,因此pom应尽量依赖于最外层、最顶层的包,例如项目依赖 A,A又依赖于B,此时pom应该只配置对A的依赖,不要配置对A和B的精确依赖(除非对B的版本有特殊要求)。