Maven / Ivy:依赖于不同名称的相同工件

时间:2010-05-04 06:20:10

标签: maven-2 ivy

目前我正在使用Ivy进行依赖管理。而且我经常遇到由于传递依赖而获得具有不同名称的相同jar文件的问题。

示例:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-javamail_1.4_spec</artifactId>
    <version>1.4</version>
</dependency>

我正在考虑尝试Maven。

在常春藤或Maven中消除这些相同神器的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

Global exclusion of artifacts将是一个很好的功能来处理这种情况 - 具有不同名称的相同工件 - 直到Maven提供更好的方式来处理“Specs JARs”aka Virtual Dependencies

很遗憾,目前无法使用此类功能(请参阅MNG-3196MNG-1977),因此您必须声明dependency exclusions以从传递依赖性的依赖项中排除不需要的工件。在Maven中,可以通过在pom的<exclusions>部分下添加<dependency>标记来完成此操作。

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
  </dependencies>
</project>

如果所有项目都使用Project-A-1.0.jar,一种可能的解决方案是在公司POM的dependencyManagement部分下声明这一点,不要重复。

答案 1 :(得分:0)

在这个特定的例子中,我会选择javax。如果你有不同名称的工件,你可以在Maven中使用排除。我不知道在常春藤这是否可行。