简介
Maven 3.5.0版本提供了一种对<version>标签进行统一管理的特性。在此版本之前的maven项目并不支持这一特性
现在可以在<version>标签中使用${revision}、${sha1}和${changelist}作为占位符。
单个项目中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | <project>     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.apache</groupId>         <artifactId>apache</artifactId>         <version>18</version>     </parent>     <groupId>org.apache.maven.ci</groupId>     <artifactId>ci-parent</artifactId>     <name>First CI Friendly</name> 	     <version>${revision}</version>     ... </project>
   | 
 
单个项目中的<version>标签中可以直接使用${revision}、${sha1}和${changelist}占位符。
(1)执行mvn命令时可以手动指定环境变量来更改占位符的值。如:
1
   | mvn -Drevision=1.0.0-SNAPSHOT clean package
   | 
 
(2)当前项目的根目录下创建.mvn文件夹,并在该文件夹下创建maven.config文件,在该文件中配置我们在执行mvn命令时额外的参数,如:.mvn/maven.config
1
   | -Drevision=2.0.0-SNAPSHOT
   | 
 
通过编写上面的文件,我们可以直接使用命令,而无需指定手动指定占位符的值。
(3)在pom.xml文件中设置<properties>标签,指定占位符的值。
1 2 3
   | <properties>     <revision>3.0-SNAPSHOT</revision> </properties>
   | 
 
注:${revision}、${sha1}和${changelist}可以单独使用,也可以混合使用。
多模块项目中使用
多模块项目中使用占位符和单模块项目中一致,父项目类似于:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | <project>   <modelVersion>4.0.0</modelVersion>   <parent>     <groupId>org.apache</groupId>     <artifactId>apache</artifactId>     <version>18</version>   </parent>   <groupId>org.apache.maven.ci</groupId>   <artifactId>ci-parent</artifactId>   <name>First CI Friendly</name>   <version>${revision}</version>   ...   <properties>     <revision>1.0.0-SNAPSHOT</revision>   </properties>   <modules>     <module>child1</module>     ..   </modules> </project>
   | 
 
子项目类似于:
1 2 3 4 5 6 7 8 9 10 11
   | <project>   <modelVersion>4.0.0</modelVersion>   <parent>     <groupId>org.apache.maven.ci</groupId>     <artifactId>ci-parent</artifactId>     <version>${revision}</version>   </parent>   <groupId>org.apache.maven.ci</groupId>   <artifactId>ci-child</artifactId>    ... </project>
   | 
 
依赖
在多模块项目中,经常会在模块之间互相定义依赖。定义依赖项及其相应版本的常用方法是使用${project.version},并且此方法没有更改。如果尝试使用${revision}替代${project.version},将会在构建时发生错误。
子项目之间的依赖应该像下面这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | <project>   <modelVersion>4.0.0</modelVersion>   <parent>     <groupId>org.apache.maven.ci</groupId>     <artifactId>ci-parent</artifactId>     <version>${revision}</version>   </parent>   <groupId>org.apache.maven.ci</groupId>   <artifactId>ci-child</artifactId>    ...   <dependencies> 	<dependency>       <groupId>org.apache.maven.ci</groupId>       <artifactId>child2</artifactId>                <version>${project.version}</version>     </dependency>   </dependencies> </project>
   | 
 
Install / Deploy
安装本地和发布到远程仓库,必须使用flatten-maven-plugin插件。否则安装到仓库的文件无法被maven使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | <build>     <plugins>         <plugin>             <groupId>org.codehaus.mojo</groupId>             <artifactId>flatten-maven-plugin</artifactId>             <version>1.1.0</version>             <configuration>                 <updatePomFile>true</updatePomFile>                 <flattenMode>resolveCiFriendliesOnly</flattenMode>             </configuration>             <executions>                 <execution>                     <id>flatten</id>                     <phase>process-resources</phase>                     <goals>                         <goal>flatten</goal>                     </goals>                 </execution>                 <execution>                     <id>flatten.clean</id>                     <phase>clean</phase>                     <goals>                         <goal>clean</goal>                     </goals>                 </execution>             </executions>         </plugin>     </plugins> </build>
   | 
 
注:在使用该插件进行构建时,会在项目目录下增加.flattened-pom.xml文件,该文件为临时文件,在使用版本管理工具时,可以将该文件忽略。