我正在使用Gradle作为我的项目。我在build.gradle中指定的依赖项之一是
compile 'org.glassfish.jersey.media:jersey-media-moxy:2.0'
这在普通的Java应用程序上工作正常,但是当我尝试在Android上构建它时,我得到:
在查看引用的库时,很明显有javax.inject-2.3.0-b05.jar
和javax.inject-1.jar
,我发现它们都是由上面的依赖项添加的。我猜这个'重复'jar是造成构建错误的原因。
我该如何解决这个问题?为什么依赖包含两个相同的jar?有没有办法用这两个罐子制作Android版本或者删除其中一个罐子?
答案 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