好吧,我不是在谈论众所周知的公共日志记录问题,我知道我可以通过设置99.0不存在的版本来禁用它。
我的问题是,一些包包含在不同的依赖项中,比如,aspectjlib包含在org.aspectj:aspectjlib和aspectj:aspectjlib中。在某些情况下,传递依赖可以同时引入两个jar,而不同版本,例如org.aspectj:aspectjlib:1.7.3,aspectj:aspectjlib:1.6.1。并且错误加载aspectj:aspectjlib:1.6.1意外不是我的意图。那么有没有像commons-logging这样的方法我可以完全禁用aspectj:aspectjlib?
我尝试使用99.0的相同技巧 - 不存在,只是为了从maven中找到错误:
[错误]无法在项目XXX上执行目标:无法解决 项目XXX的依赖项:jar:1.0.0-SNAPSHOT:以下内容 工件无法解决: AspectJ的:aspectjlib:罐子:99.0 - 不 - 不存在, AspectJ的:aspectjrt:罐子:99.0 - 不 - 不存在, aspectj:aspectjweaver:jar:99.0-does-not-exist:找不到工件 aspectj:aspectjlib:jar:99.0-在tbmirror中不存在 (http://mvnrepo.taobao.ali.com/mvn/repository) - > [帮助1]
答案 0 :(得分:1)
好吧,虽然有些存储库确实提供99.0但不存在日志系统依赖关系,如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永远不会出现在最终构建的lib中。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用 Maven 的 dependency exclusions 来消除您不想要的版本。使用您的示例:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>includes-new-aspectj</groupId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>includes-old-aspectj</groupId>
<exclusions>
<exclusion>
<groupId>org.aspectj<groupId>
<artifactId>aspectjlib</artifactId>
<exclusion>
</exclusions>
</dependency>
</dependencies>
或者,您可以简单地使用 dependency management 固定您想要的版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjlib</artifactId>
<version>1.7.3</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>includes-new-aspectj</groupId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>includes-old-aspectj</groupId>
</dependency>
</dependencies>