flatten-maven-plugin 插件的功能就不赘述了,网上也有很多文章描述这一块的内容。以一个 maven 多模块的项目为例,使用的时候直接在项目的父 pom 里加入如下的配置:
org.codehaus.mojo flatten-maven-plugin1.2.7 resolveCiFriendliesOnly flatten process-resources flatten flatten.clean clean clean
然后在父 pom 里引入 revision 占位符:
对于需要在项目中依赖的子模块,我们可以在 dependencyManagement 中统一定义:
子模块指定 parent 使用 revision 作为版本号:
在子模块中引入 grpc-demo-proto 依赖不用指定版本号:
下面我们将 grpc-demo-proto 打包成 jar 包:mvn clean install。执行完这个命令后会发现生成了一个文件「.flattened-pom.xml」,这是把 revision 占位符替换后的完整的 pom 文件:
在另外一个项目中引入刚才打的包:
com.jiaobuchong grpc-demo-proto1.0-SNApSHOT
通过 idea 点进去查看 grpc-demo-proto 的 pom 文件内容发现 revision 占位符被替换了:
继续点到父 pom 发现如下图所示的 revision 都没被替换:
父 pom 中的 revision 没有被替换是不是感觉有点不爽。那下面该 updatePomFile 出场了。在官方文档里有这样一段描述 updatePomFile 的话:
The flag to indicate if the generated flattened POM shall be set as POM file to the current project. By default this is only done for projects with packaging other than pom. You may want to also do this for pom packages projects by setting this parameter to true or you can use false in order to only generate the flattened POM but never set it as POM file. If flattenMode is set to bom the default value will be true.
大概意思是:updatePomFile 属性表示是否将生成的 .flattened-pom.xml作为当前项目的 pom 文件。默认只有打包的时候(package、install、deploy)会将 .flattened-pom.xml 做为当前项目的 pom 文件,但是打包类型
这段英文我看了好一会才看明白,懵逼了。那就来试试将 updatePomFile 属性设置为 true 是什么效果吧:
true
真的挺神奇的,grpc-demo-proto 父 pom 中的占位符 revision 都被替换了:
有了 flatten-maven-plugin,妈妈再也不用担心我在 maven 里做不好版本管理了!
完整代码:https://github.com/jiaobuchong/grpc-learning
其他参考:
Maven多模块结构下版本管理的正确姿势(CI Friendly Versions) - ${revision}
maven deploy plugin_maven 版本管理与 flatten-maven-plugin
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)