java与依赖项共享一个库,需要在gradle中设置transitive=false才能工作
我在jcenter上共享了一个库,供maven和gradle用户添加到他们的依赖项中。这个库使用了一些常见的东西,比如gson、guava等。它是一个大型多模块项目的一部分,但我只将一个子模块部署到存储库中。完整的父pom。xml在这里:
https://github.com/bsautner/com.nimbits/blob/master/pom.xml
导致图书馆pom的子pom如下:
https://github.com/bsautner/com.nimbits/blob/master/nimbits_io/pom.xml
子pom具有如下依赖关系:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
相当标准。当我将我的库导入安卓项目(本例中为gradle)时,我需要包含一个transitive=false,如下所示:
compile ('com.nimbits:nimbits_io:3.9.47') {
transitive = false
}
如果我不这么做,安卓构建会失败,出现很多错误,比如:
Error:Gradle: Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
java.util.zip.ZipException: duplicate entry: org/slf4j/impl/StaticLoggerBinder.class
我的理解是,我的jar在安卓项目中已经有重复的依赖项
我不明白我做错了什么,也不明白为什么我需要使用那个标志。如果我将这些依赖项设置为“提供”,我需要我的用户将我的库添加到他们的依赖项中。如何在不导致用户重复错误的情况下与依赖项共享库。没有其他库需要这个标志,所以我一定是做错了什么
共 (0) 个答案