简介
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
文件,该文件为临时文件,在使用版本管理工具时,可以将该文件忽略。