flatten-maven-plugin 的使用

2023-11-19

引入 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flatten-maven-plugin 的使用 的相关文章

随机推荐