这种依赖性给了我一个jar的两个版本。 我该如何解决?

我正在使用Gradle作为我的项目。 我在build.gradle中指定的依赖项之一是
compile 'org.glassfish.jersey.media:jersey-media-moxy:2.0'

这在普通的Java应用程序上工作正常,但是当我尝试在Android上构建它时,我得到:

在查看引用的库时,很明显有javax.inject-2.3.0-b05.jarjavax.inject-1.jar ,我发现它们都是由上面的依赖项添加的。 我猜这个“重复”的jar是造成构建错误的原因。

我该如何解决这个问题? 为什么依赖包含两个相同的jar? 有没有办法用这两个jar子制作Android版本或删除其中一个jar子?

你似乎有一个依赖树

 project |--- org.glassfish.jersey.media:jersey-media-moxy:2.0 | \--- *:javax.inject:1 \--- *:javax.inject:2.3.0-b05 

哪个*是该组,我怀疑可能与这两个组不同。

尝试通过使用依赖项任务了解如何获取依赖项

 gradle dependency 

如果您需要排除依赖项,请在标记中输入它,类似于以下示例

 compile('org.hibernate:hibernate:3.1') { //excluding a particular transitive dependency: exclude module: 'cglib' //by artifact name exclude group: 'org.jmock' //by group exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group } 

通常gradle每个依赖项只包含1个jar。 如果找到相同依赖项的不同版本,则将使用较新版本。

但是,在您的情况下,这两个jar是具有不同组名的依赖项:

 'javax.inject:javax.inject:1' 'org.glassfish.hk2.external:javax.inject:2.3.0-b05' 

这就是gradle包含两者的原因,因为它们被视为不同的依赖关系。

‘javax.inject:javax.inject:1’很老了,我想你应该像Niels Bech Nielsen所说的那样排除它。

要找出此依赖项的来源,可以使用命令:

 gradle -q dependencyInsight --dependency inject