maven - 具有 “outgoing”依赖关系的Maven中央jar

标签 maven gradle transitive-dependency

我们使用的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之外的地方可能会引起问题。

最佳答案

首先,这个笨拙的部门有些旧,是的,您是对的..这是一个问题,或者更好的是一个问题。很久以前,中环的规则已更改,因此您不能将pom( jar )放入不属于中环的引用jar / 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。如果他们忘记添加javax.mail,则构建将失败。

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

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

关于maven - 具有 “outgoing”依赖关系的Maven中央jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35886332/

相关文章:

gradle - JavaFX 11 : Create a jar file with Gradle

maven - keycloak 的身份验证 SPI

maven - distributionManagement 与存储库下的存储库标签?

android - 使用 Gradle for Android 进行多项目设置

android - 配置gradle-pitest-plugin时获取CustomMessageMissingMethodException

Gradle 不包含传递依赖

java - Maven 组 ID 中的 "com"是什么意思?有必要吗?

java - 在多模块 Maven 项目中注入(inject) Autowiring 字段失败 - NoSuchBeanDefinitionException

java - Ivy 未解决公共(public) Maven 存储库的传递依赖关系

maven相同的传递依赖但不同的版本