Maven 3.5.0版本提供了一种对<version>
标签进行统一管理的特性。在此版本之前的maven项目并不支持这一特性
现在可以在<version>
标签中使用${revision}
、${sha1}
和${changelist}
作为占位符。
<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
命令时可以手动指定环境变量来更改占位符的值。如:
mvn -Drevision=1.0.0-SNAPSHOT clean package
(2)当前项目的根目录下创建.mvn
文件夹,并在该文件夹下创建maven.config
文件,在该文件中配置我们在执行mvn
命令时额外的参数,如:.mvn/maven.config
-Drevision=2.0.0-SNAPSHOT
通过编写上面的文件,我们可以直接使用命令,而无需指定手动指定占位符的值。
mvn clean package
(3)在pom.xml
文件中设置<properties>
标签,指定占位符的值。
<properties>
<revision>3.0-SNAPSHOT</revision>
</properties>
注:${revision}
、${sha1}
和${changelist}
可以单独使用,也可以混合使用。
多模块项目中使用占位符和单模块项目中一致,父项目类似于:
<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>
子项目类似于:
<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}
,将会在构建时发生错误。
子项目之间的依赖应该像下面这样:
<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>
<!-- 不能使用 ${revision} -->
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
安装本地和发布到远程仓库,必须使用flatten-maven-plugin插件。否则安装到仓库的文件无法被maven使用。
<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
文件,该文件为临时文件,在使用版本管理工具时,可以将该文件忽略。