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

升级Log4j至2.17.1后仍下载2.12.1的bom包,如何阻止?

解决Spring Boot构建时下载Log4j 2.12.1 BOM的问题

问题根源

Spring Boot 2.2.6.RELEASE的spring-boot-starter-parent在其dependencyManagement中通过${log4j2.version}属性导入了Log4j 2.12.1的BOM。尽管你在子项目中覆盖了log4j2.version属性并导入了2.17.1的BOM,但Maven在解析父pom时仍可能尝试拉取旧版本BOM,或是存在其他依赖间接引入了旧版本BOM,导致被infra的下载限制拦截。

可行解决方案

1. 调整BOM导入优先级

确保子项目的dependencyManagement中优先导入Log4j 2.17.1的BOM,将其放在dependencyManagement的最顶部,确保解析时优先覆盖父pom的旧版本配置:

<dependencyManagement>
    <dependencies>
        <!-- 优先导入新版本BOM,覆盖父pom的旧版本 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-bom</artifactId>
            <version>2.17.1</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <!-- 其他dependencyManagement配置 -->
    </dependencies>
</dependencyManagement>

2. 放弃BOM,直接指定依赖版本

如果导入BOM仍无法阻止旧版本下载,可以直接在dependencyManagement中逐个指定Log4j相关依赖的版本,避免Maven拉取任何BOM文件:

<properties>
    <java.version>11</java.version>
    <log4j2.version>2.17.1</log4j2.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!-- 显式指定所有Log4j核心依赖版本 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!-- 根据实际使用添加其他Log4j依赖(如log4j-web) -->
    </dependencies>
</dependencyManagement>

3. 用Enforcer插件拦截旧版本

配置maven-enforcer-plugin强制禁止使用Log4j 2.12.1版本,从构建层面拦截旧版本的下载和使用:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>3.0.0-M3</version>
            <executions>
                <execution>
                    <id>block-old-log4j</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <bannedDependencies>
                                <excludes>
                                    <exclude>org.apache.logging.log4j:*:2.12.1</exclude>
                                    <exclude>org.apache.logging.log4j:log4j-bom:2.12.1</exclude>
                                </excludes>
                                <message>禁止使用Log4j 2.12.1版本,请切换至2.17.1</message>
                            </bannedDependencies>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- 其他构建插件 -->
    </plugins>
</build>

4. 排查间接引入的旧BOM

执行mvn dependency:tree -Dverbose命令,查看依赖树中是否有其他依赖的pom导入了Log4j 2.12.1的BOM。若存在,可通过子项目的dependencyManagement显式覆盖对应依赖的版本,或调整依赖排除规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:30:30