maven:如何禁用某些依赖项?

时间:2014-03-12 04:50:36

标签: java maven

好吧,我不是在谈论众所周知的公共日志记录问题,我知道我可以通过设置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]

3 个答案:

答案 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)

99.0

There is no aspectj:aspectjlib版本,您的项目配置为使用了错误的版本,请在99.0

中检查pom.xml

答案 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>