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

时间:2014-07-06 18:26:17

标签: java android maven gradle jersey

我正在使用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?有没有办法用这两个罐子制作Android版本或者删除其中一个罐子?

2 个答案:

答案 0 :(得分:2)

您似乎有一个依赖树

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

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

尝试使用dependency任务

了解如何抓取依赖项
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
}

答案 1 :(得分:1)

通常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