如何将主依赖关系标记为“编译”,将子依赖关系标记为“提供”?

时间:2011-06-29 14:35:42

标签: java maven intellij-idea

我的一个Android项目需要oauth.signpost工件,所以我的pom.xml中有类似的内容:

...
<dependency>
    <groupId>oauth.signpost</groupId>
    <artifactId>signpost-core</artifactId>
    <version>1.2.1.1</version>
    <scope>compile</scope>
</dependency>
...

问题是这取决于更多的工件,例如:org.apache.httpcomponents:httpclient:4.0.1。问题是Android已经提供了该软件包,因此它使我的构建过程崩溃。

所以,我通常做的是转到IntelliJ上的依赖项配置,并手动将这些冗余工件标记为提供而不是 compile

intellij dependencies

这个过程很烦人,不仅因为我有很多Maven依赖项,而且因为有时IntelliJ 忘记哪些依赖项是提供的市场,它会标记'全部为编译

我看到的唯一解决方案是在pom.xml中指定哪些依赖项提供,哪些编译。但是它们有很多,所以需要一些时间(同样,我必须手动检查每个工件需要哪个版本等)。

那么,它是否可以告诉Maven将子依赖项标记为提供,同时将主要依赖项保持为 compile

1 个答案:

答案 0 :(得分:2)

可以选择添加依赖项排除。

请考虑以下事项:

  • 我们假设您有两个项目 - bar和foo。
  • Bar依赖于log4j。
  • 您希望foo依赖于不同版本的log4j。

这将是foo模块中的pom.xml:

<project>
  <groupId>kung.fu</groupId>
  <artifactId>foo</artifactId>
  ...
  <dependencies>
    <dependency>
      <groupId>kung.fu</groupId>
      <artifactId>bar</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>
</project>