正文
起因是公司开始推代码版本管理的相关制度,而开发过程中经常使用多模块构建项目,每次做版本管理时都需要对每个模块及子模块下的pom文件中parent.version
和模块下依赖中的version
进行修改,改的地方非常多,且非常容易漏。为此就上网查询有没有对应的简便的方法,最开始在顶层模块pom中使用<properties>
指定版本进行依赖下的模块版本控制,但是通过这种方法没办法修改parent.version
会出现这种bug。
最后上网搜索知道Maven从3.5.0-beta-1开始就支持${revision}
, ${sha1}
和/或 ${changelist}
来作为占位符,并给出对应的解决方案,详情可查看官网链接
从官网中得知可以配合flatten-maven-plugin
插件来实现maven构建,这一点在官网中也有体现
xml
<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>
<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>
<modules>
<module>child1</module>
..
</modules>
</project>
使用这套插件和使用方法后每个模块会多出.flattened-pom.xml
这个文件,如果使用git进行管理,避免将文件上传至git库,可以在.gitignore
文件下加上该文件名称
# 依赖版本配置文件
.flattened-pom.xml
子模块中如果引用其他子模块依赖,则依赖中的version
必须使用${project.version}
来保证依赖版本和当前模块版本一致,如果使用${revision}
会出现编译失败。
最后结果是这样
参考文章
https://blog.csdn.net/changqing5818/article/details/131196288
https://maven.apache.org/maven-ci-friendly.html