0

我们使用的dumbster:dumbster:1.6(来自Maven Central)声明了对javax.mail:mail:1.3.2的依赖。不幸的是,Maven Central 仅从 1.4 版开始包含 javax.mail:mail 的 jar。如果我向dumbster:dumbster:1.6 和javax.mail:mail:1.4.1 添加依赖项,一切正常。

但我想避免告诉我们所有的开发人员,dumbster 不能传递地工作,而是需要一个额外的 mail.jar。有没有办法避免这种情况?

我的印象是这个问题更普遍:来自 Maven Central 的 Jars 指向 Maven Central 之外可能会导致问题。

4

1 回答 1

1

首先,这个愚蠢的部门有点老了,是的,你是对的..这是一个问题,或者更好的是一个问题。很久以前,中央的规则已经改变,因此您不能将 pom(罐子)放入中央,其中引用不在中央的罐子/deps。

通常的解决方案是在公司 pom 文件中定义这样的依赖项,该文件在 dependencyManagement 中声明它并排除传递依赖项并添加更新的版本。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>dumbster</groupId>
      <artifactId>dumbster</artifactId>
      <version>1.6</version>
      <exclusions>
        <exclusion>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.1</version>
    </dependency>
  </dependencies>
</dependencyManagement>

通过使用上述内容,您的开发人员将被迫javax.mail通过添加以下内容来定义 smiply。如果他们忘记添加javax.mail那里,构建将失败。

<dependencies>
  <dependency>
    <groupId>dumbster</groupId>
    <artifactId>dumbster</artifactId>
  </dependency>
  <dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
  </dependency>
</dependencies>

您还可以使用maven-enforcer-plugin强制使用正确的版本。

于 2016-03-09T08:41:12.873 回答