目前我正在使用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中消除这些相同神器的最佳做法是什么?
答案 0 :(得分:1)
Global exclusion of artifacts将是一个很好的功能来处理这种情况 - 具有不同名称的相同工件 - 直到Maven提供更好的方式来处理“Specs JARs”aka Virtual Dependencies。
很遗憾,目前无法使用此类功能(请参阅MNG-3196和MNG-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中使用排除。我不知道在常春藤这是否可行。