You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一POM中构建并引用BOM?含Jenkins父POM场景

在同一个POM环境中构建并引用BOM的解决方案

嘿,这个场景我之前帮不少开发者处理过——核心就是要让Maven先搞定BOM模块的构建,再让父POM能顺利引用它。下面给你两个最靠谱的实现方案,都是生产环境里常用的:

方案一:用多模块项目结构(推荐)

这是最清晰、最符合Maven设计理念的方式,把BOM作为独立子模块放在父项目下,父POM同时承担聚合POM和父POM的角色。

第一步:调整项目结构

你的项目应该是这样的层级:

abs-parent-project/
├── pom.xml       # 聚合+父POM
└── abs-bom/
    └── pom.xml   # BOM模块的POM

第二步:配置父POM

在父POM里先声明要聚合的模块(确保BOM被优先构建),再在dependencyManagement中导入BOM:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.org.fgn.abs</groupId>
    <artifactId>abs-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!-- 聚合模块:告诉Maven先构建abs-bom -->
    <modules>
        <module>abs-bom</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <!-- 引用自己的BOM模块,版本用父项目的版本变量即可 -->
            <dependency>
                <groupId>com.org.fgn.abs</groupId>
                <artifactId>abs-bom</artifactId>
                <version>${project.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

第三步:配置BOM模块的POM

让BOM模块继承父POM,然后在里面定义你的依赖版本管理规则:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.org.fgn.abs</groupId>
        <artifactId>abs-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>abs-bom</artifactId>
    <packaging>pom</packaging>
    <name>abs-bom</name>

    <!-- 在这里定义所有需要统一版本的依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.3.20</version>
            </dependency>
            <!-- 其他需要管理的依赖... -->
        </dependencies>
    </dependencyManagement>
</project>

第四步:Jenkins任务配置

直接在Jenkins里执行针对父POM的Maven命令即可:

clean install

Maven会自动按照modules里的顺序先构建abs-bom,把它安装到本地仓库(如果是deploy命令会推到远程仓库),之后父POM在处理dependencyManagement时就能找到这个BOM了。

方案二:单POM下的hack式实现(不推荐)

如果实在不想拆分模块,只能通过分阶段执行Maven命令来实现,但这种方式容易出问题,仅作应急参考:

  1. 在父POM里加一个专门构建BOM的Profile:
<profiles>
    <profile>
        <id>build-bom</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>install</phase>
                            <goals>
                                <goal>install-file</goal>
                            </goals>
                            <configuration>
                                <file>${project.basedir}/pom.xml</file>
                                <groupId>com.org.fgn.abs</groupId>
                                <artifactId>abs-bom</artifactId>
                                <version>${project.version}</version>
                                <packaging>pom</packaging>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
  1. Jenkins任务分两步执行:
    • 第一步:先构建并安装BOM到本地仓库
      clean install -P build-bom
      
    • 第二步:再正常构建父POM
      clean install
      

关键注意事项

  • 确保父POM和BOM模块的版本完全一致:因为BOM继承父POM的版本,所以不用重复编写版本号,避免不一致问题。
  • Jenkins任务不要跳过install/deploy步骤:父POM引用BOM需要它存在于本地或远程仓库中。
  • 如果使用SNAPSHOT版本,Maven会自动拉取最新构建;如果是RELEASE版本,要确保BOM已经完成构建并上传到仓库。

内容的提问来源于stack exchange,提问作者Sudhir Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:12:46