好吧,我并不是在谈论众所周知的公共记录问题,我知道可以通过设置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将永远不会出现在最终构建的库中。

08-03 17:07