正文
起因是公司开始推代码版本管理的相关制度,而开发过程中经常使用多模块构建项目,每次做版本管理时都需要对每个模块及子模块下的pom文件中parent.version
和模块下依赖中的version
进行修改,改的地方非常多,且非常容易漏。为此就上网查询有没有对应的简便的方法,最开始在顶层模块pom中使用<properties>
指定版本进行依赖下的模块版本控制,但是通过这种方法没办法修改parent.version
会出现这种bug。
最后上网搜索知道Maven从3.5.0-beta-1开始就支持${revision}
, ${sha1}
和/或 ${changelist}
来作为占位符,并给出对应的解决方案,详情可查看官网链接
从官网中得知可以配合flatten-maven-plugin
插件来实现maven构建,这一点在官网中也有体现
<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