flatten-maven-plugin 的使用

flatten-maven-plugin 的使用,第1张

flatten-maven-plugin 的使用 引入 flatten-maven-plugin

flatten-maven-plugin 插件的功能就不赘述了,网上也有很多文章描述这一块的内容。以一个 maven 多模块的项目为例,使用的时候直接在项目的父 pom 里加入如下的配置:

    
        
            
                org.codehaus.mojo
                flatten-maven-plugin
                1.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 文件:

flatten-maven-plugin 产生的神奇效果

在另外一个项目中引入刚才打的包:

      
            com.jiaobuchong
            grpc-demo-proto
            1.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 文件,但是打包类型 pom 的 pom.xml 中的占位符是不会被替换的。如果想要都被替换,那就将 updatePomFile 的属性设置为 true 吧。如果 flattenMode 被设置为 bom,updatePomFile 默认属性值为 true。

这段英文我看了好一会才看明白,懵逼了。那就来试试将 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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5706996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存