有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案