2010-05-04 61 views
1

目前我使用的Ivy依赖管理。很多时候,由于传递依赖性,我遇到了获取具有不同名称的相同jar文件的问题。Maven的/常春藤:相同的工件具有不同的名称依赖

例子:

<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

在这个特定的实施例I将选择使用javax之一。如果你有不同名称的工件,你可以在Maven中使用排除。我不知道这是否可能在常春藤。

+0

是的,有可能在常春藤排除。但我想寻找一种替代解决方案,以便我和我的同事不需要在每个项目中重复这些排除。目前我正在研究设置一个Maven仓库管理器(使用Nexus),不确定这会有帮助。 – ThiamTeck 2010-05-04 07:07:02

+0

在父pom中定义一个dependencyManagement部分,将其部署到您的Nexus并且任何其他同事都可以使用它。 – khmarbaise 2010-05-04 13:15:55

1

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

不幸的是,这种功能目前无法使用(见MNG-3196MNG-1977),所以你必须声明dependency exclusions排除从依赖传递地拉动了不必要的神器。在Maven中,这是通过在pom的<dependency>部分下添加一个<exclusions>标记完成的。

<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

感谢您的指点,我发现常春藤实际上支持[全球排除](http://ant.apache.org/ivy/history/trunk/ivyfile/exclude.html)。 – ThiamTeck 2010-05-04 11:21:00

+0

@ThiamTeck Ahh,来自常春藤(我更像一个Maven家伙,并没有意识到这一点)。感谢您的反馈。 – 2010-05-04 11:36:37

相关问题