好吧,我并不是在谈论众所周知的公共记录问题,我知道可以通过设置99.0-does-not-exist版本禁用它。
我的问题是,某些程序包包含在不同的依赖项中,例如,org.aspectj:aspectjlib和Aspectj:aspectjlib中都包含了Aspectjlib。在某些情况下,传递性依赖项可能同时引入两个jar,而版本不同,例如org.aspectj:aspectjlib:1.7.3,aspectj:aspectjlib:1.6.1。我不打算错误地加载Aspectj:aspectjlib:1.6.1。因此,有没有一种类似于commons-logging的方法可以完全禁用Aspectj:aspectjlib?
我使用99.0-does-not-exist尝试了相同的技巧,只是发现了来自Maven的错误:
[错误]无法在项目XXX上执行目标:无法解决
项目XXX:jar:1.0.0-SNAPSHOT的依赖项:
工件无法解决:
Aspectj:aspectjlib:jar:99.0-不存在,
Aspectj:aspectjrt:jar:99.0-不存在,
Aspectj:aspectjweaver:jar:99.0-不存在:找不到工件
Aspectj:aspectjlib:jar:99.0-在tbmirror中不存在
(http://mvnrepo.taobao.ali.com/mvn/repository)-> [帮助1]
最佳答案
好吧,尽管某些存储库确实为日志系统依赖项提供了99.0-does-not-exist,例如log4j,slf4j-log4j,commons-logging等,但这不是通用解决方案。
我找到一种解决方案:使用“提供的”范围。
为了澄清,在上面的示例中,我有两个相互冲突的依赖项:org.aspectj:aspectjlib:1.7.3,aspectj:aspectjlib:1.6.1,我想禁用Aspectj:aspectjlib:1.6.1,我只需要放置此在顶级pom中:
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjlib</artifactId>
<version>1.6.1</version>
<scope>provided</scope>
</dependency>
这样,aspectj:aspectjlib:1.6.1将永远不会出现在最终构建的库中。