如何阻止maven-dependency-plugin自动下载log4j?
解决maven-dependency-plugin自动下载log4j 1.2.12的方案
一、优先升级插件版本
根据MDEP-902的问题记录,这个bug已经在maven-dependency-plugin的后续版本中修复(比如3.6.2及以上)。直接升级插件就能彻底解决问题:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.2</version> <!-- 推荐使用最新稳定版 --> </plugin> </plugins> </build>
二、通过仓库配置拦截下载
如果暂时无法升级插件,可以在项目pom.xml或全局settings.xml中配置仓库排除规则,阻止Maven下载log4j 1.2.12:
<repositories> <repository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> <releases> <enabled>true</enabled> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </exclusion> </exclusions> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
或者用镜像拦截(更彻底):
<mirrors> <mirror> <id>block-log4j-1.2.12</id> <mirrorOf>central:log4j:log4j:1.2.12</mirrorOf> <url>file:///dev/null</url> <!-- 指向无效路径,触发下载失败 --> </mirror> </mirrors>
三、临时应急:依赖管理标记为Provided
在项目的依赖管理中强制标记该版本的log4j为provided,让Maven认为这个包已经由环境提供,不会主动下载:
<dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement>
关于触发下载的原因
这个问题并非插件直接/间接依赖log4j,而是插件在执行依赖分析时,加载的某些旧Maven兼容性组件会尝试解析log4j 1.2.12的POM,从而触发Maven的下载逻辑。官方已经在后续版本中修复了这个不合理的解析行为。
内容的提问来源于stack exchange,提问作者Nth Dimension
相关产品推荐
相关产品推荐

