flatten-maven-plugin 的使用

引入 flatten-maven-plugin

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.2.7</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>

然后在父 pom 里引入 revision 占位符:
在这里插入图片描述
对于需要在项目中依赖的子模块,我们可以在 dependencyManagement 中统一定义:
在这里插入图片描述
子模块指定 parent 使用 revision 作为版本号:
在这里插入图片描述
在子模块中引入 grpc-demo-proto 依赖不用指定版本号:
在这里插入图片描述
下面我们将 grpc-demo-proto 打包成 jar 包:mvn clean install。执行完这个命令后会发现生成了一个文件「.flattened-pom.xml」,这是把 revision 占位符替换后的完整的 pom 文件:在这里插入图片描述

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

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

      <dependency>
            <groupId>com.jiaobuchong</groupId>
            <artifactId>grpc-demo-proto</artifactId>
            <version>1.0-SNApSHOT</version>
        </dependency>

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

这段英文我看了好一会才看明白,懵逼了。那就来试试将 updatePomFile 属性设置为 true 是什么效果吧:

<updatePomFile>true</updatePomFile>

真的挺神奇的,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

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值