如何阻止Maven下载已排除且未显示在dependency:tree的log4j 1.2.14?
解决Log4j 1.2.14仍被自动下载的问题
先找准问题根源
首先得明确到底是哪个环节在引入这个老版本依赖:
- 执行
mvn dependency:tree -Dverbose -Dincludes=log4j:log4j,只过滤显示log4j相关依赖,排查是否有遗漏的间接引用没被排除。 - 如果上面的命令没结果,就检查Maven插件的依赖——
dependency:tree默认只显示项目业务依赖,不包含插件依赖,执行mvn dependency:tree -Dscope=plugin,看看测试、打包这类插件是不是自带了老版本log4j。
针对性解决方法
1. 排除其他业务依赖中的log4j
如果排查到是其他业务依赖间接引入,直接给对应依赖添加排除规则:
<dependency> <groupId>目标依赖的groupId</groupId> <artifactId>目标依赖的artifactId</artifactId> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
2. 处理插件依赖的老版本log4j
如果是Maven插件(比如maven-surefire-plugin)引入的,就在插件配置里添加排除或强制指定新版本依赖:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>你的插件版本</version> <dependencies> <!-- 排除插件依赖的老版本log4j --> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit4</artifactId> <version>对应子依赖版本</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <!-- 引入你指定的新版本log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.17.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.1</version> </dependency> </dependencies> </plugin> </plugins> </build>
3. 全局禁用Log4j 1.x
在pom.xml的dependencyManagement里添加规则,强制Maven忽略所有对Log4j 1.x的引入请求:
<dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>0</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement>
4. 清理本地仓库缓存
有时候本地仓库的缓存会导致异常,执行mvn clean install -U强制更新依赖,或者手动删除本地仓库中log4j/log4j/1.2.14目录,再重新构建。
内容的提问来源于stack exchange,提问作者green.it
相关产品推荐
相关产品推荐

