Java - 依赖项上的包冲突,强制从其中选择一个

标签 java gradle jar

我的项目有一些依赖项,我正在使用 Gradle。

我通过以下方式声明它们:

dependencies {
  compile 'org.json:json:20180130'
  compile 'com.test.myapi:1.0.1'
}

com.test.myapi:1.0.1 jar 里面有 org.json (我已经废弃了非常糟糕的东西..)。
现在,我需要使用函数 JSONTokener,它在最新版本中具有新的构造函数,但我的 com.test.myapi 包中没有它。

当我使用 distroJar 时,构建成功创建了 jar 和 tgz,但我收到运行时错误,因为由于某种原因它采用了旧版本中的 JSONTokener 方法。

有没有办法强制项目从新的项目中获取 org.json,或者禁用内部包中的 org.json?

谢谢。

最佳答案

假设 myapi 将与新版本的 org.json 一起使用,您可以像这样排除旧版本

compile ('com.test.myapi:1.0.1'){
    exclude group: 'org.json', module:'json'
}

您还可以使用project-report插件来探索不需要的依赖项来自何处。 Using gradle to find dependency tree

显然排除不适用于 super jar 。

关于Java - 依赖项上的包冲突,强制从其中选择一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48913999/

相关文章:

java - 如果文件不存在则创建一个文件

java - 为什么GitLab运行程序工作失败并执行多个gradle任务?

clojure - 如何从 leiningen 项目中排除 jars?

java - jar 文件无效或损坏

java - Gradle Plugin 如何将方法添加到特定 block ?

java - 带有外部 jar 'Not a Managed Type' 的 Spring Boot

java - 使用同名更新到 Alfresco

java - Java 中的 Gremlin group By

java - 为什么 UnkownOperatorException 没有被抛出?

jenkins - jenkins如何从jenkins gradle运行指定testng.xml