1

目前我正在使用 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。

在 Ivy 或 Maven 中消除这些相同工件的任何最佳实践?

4

2 回答 2

1

工件的全局排除将是处理这种情况的一个很好的特性——相同的工件具有不同的名称——直到 Maven 提供了一种更好的方法来处理“Specs JARs”又名Virtual Dependencies

不幸的是,这样的功能目前不可用(请参阅MNG-3196MNG-1977),因此您必须声明依赖排除项以从依赖关系中排除不需要的工件,从而将其传递。在 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所有项目都使用它,一种可能的解决方案是在dependencyManagement公司 POM 的部分下声明这一点,以免重复自己。

于 2010-05-04T07:57:05.140 回答
0

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

于 2010-05-04T06:52:11.210 回答