Java 与依赖项共享库需要gradle中的transitive=false设置才能工作

Java 与依赖项共享库需要gradle中的transitive=false设置才能工作,java,android,maven,gradle,build,Java,Android,Maven,Gradle,Build,我在jcenter上共享了一个库,供maven和gradle用户添加到他们的依赖项中。这个库使用了一些常见的东西,比如gson、guava等。它是一个大型多模块项目的一部分,但我只将一个子模块部署到存储库中。完整的父pom.xml如下所示: 生成库pom的子pom如下所示: 子pom具有如下依赖关系: <dependency> <groupId>com.google.guava</groupId>

我在jcenter上共享了一个库,供maven和gradle用户添加到他们的依赖项中。这个库使用了一些常见的东西,比如gson、guava等。它是一个大型多模块项目的一部分,但我只将一个子模块部署到存储库中。完整的父pom.xml如下所示:

生成库pom的子pom如下所示:

子pom具有如下依赖关系:

       <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
      </dependency>
  compile ('com.nimbits:nimbits_io:3.9.47') {

        transitive = false

    }
如果我不这样做,android构建会失败,并出现许多错误,比如:

错误:梯度:任务的执行失败 “:app:packageAllDebugClassesForMultiDex”

java.util.zip.ZipException:重复条目:org/slf4j/impl/StaticLoggerBinder.class

我的理解是,我的jar在android项目中已经有重复的依赖项


我不明白我做错了什么,也不明白为什么我需要使用那个标志。如果我将这些依赖项设置为“提供”,我需要我的用户将我的库添加到他们的依赖项中。如何与用户共享具有依赖项的库而不导致重复错误。没有其他库需要此标志,所以我一定是做错了什么

这是重复的吗?您的某些依赖项可能包含该slf4j条目,您可能需要将sl4j从使用它们的依赖项中排除,并设置自己的?查看maven上的依赖关系树以了解更多信息。@DanieleSegato我认为这个问题更多的是从用户的角度出发的,而我的问题是我需要做些什么来避免用户出现这个问题-我正在使用mvn dependency:tree进行挖掘-也许我只是在build@bsautner你是说你的依赖会即使未在库中声明,库的用户也始终可以使用它?对我来说,这听起来像是一个运行时(过度编译)依赖关系。我的父pom.xml对我不需要的maven release插件有依赖关系,它包含许多库,比如使用mvn dependency的slf4j:tree列出了我使用的所有库,并帮助识别了它。一旦它被删除,我就可以将我的库添加到一个android项目中,而无需transitive=false-很好,谢谢各位的帮助