flatten-maven-plugin 是 Apache Maven 的一个插件,主要用于优化 Maven 项目的 POM 文件,生成一个“扁平化”的简化版本(通常称为 .flattened-pom.xml)。它在项目构建时(如打包或发布到仓库)替换原始 POM,帮助解决依赖管理和版本继承中的潜在问题。

系统要求

Maven 3.6.3
JDK 1.8

作用

  1. 简化依赖管理
    在多模块项目中,子模块的 POM 通常继承父 POM 的配置。扁平化后的 POM 会直接包含所有必要的依赖和属性,避免因继承层级过深导致的依赖冲突或版本不明确。
  2. 发布干净的 POM
    原始 POM 可能包含开发阶段的配置(如插件、未解析的变量等),而扁平化后的 POM 仅保留运行时必要的元数据,更适合发布到仓库供其他项目使用。
  3. 解决 CI/CD 中的问题
    在持续集成环境中,扁平化 POM 可以避免构建过程中因动态版本号(如 -SNAPSHOT)或未解析属性导致的错误。

简单来说就是会生成一个压缩版本的 pom.xml文件(.flattened-pom.xml),然后在 installdeploy阶段使用压缩后的 pom.xml文件,替换原来的 pom.xml文件

具体压缩策略如下:

  • 和构建有关的元素会被删除;
  • 和开发有关的元素默认会被删除;
  • 只包含构件的使用者必须的一些信息;
  • 变量会被解析;
  • 上级关系会被解析,然后被压缩删除;
  • 构建时实际使用的profile会被评估,视情况处理;
  • 由JDK或者OS驱动的profile会被保留,需要时可以动态地控制依赖。

更多信息可以去官网查看:flatten-maven-plugin

使用

<!--这部分配置详情可以查看:https://www.mojohaus.org/flatten-maven-plugin/flatten-mojo.html-->
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>flatten-maven-plugin</artifactId>
    <version>1.6.0</version>
    <executions>
        <execution>
            <!-- enable flattening -->
            <id>flatten</id>
            <phase>process-resources</phase>
            <goals>
                <goal>flatten</goal>
            </goals>
        </execution>
        <execution>
            <!-- ensure proper cleanup -->
            <id>flatten.clean</id>
            <phase>clean</phase>
            <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
    <inherited>true</inherited>
    <configuration>
        <updatePomFile>true</updatePomFile>
        <flattenMode>resolveCiFriendliesOnly</flattenMode>
    </configuration>
</plugin>
文章作者: oohmygosh
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog
Maven
喜欢就支持一下吧