我正在使用Dropwizard和Titan DB开发一个项目。两者都依赖于谷歌番石榴。一个依赖于版本15而另一个依赖于18.此错误发生在运行时:
! java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class com.thinkaurelius.titan.graphdb.database.idassigner.StandardIDPool$ID
BlockRunnable
我研究了错误和found它是由泰坦的番石榴引起的 15.7依赖性被Guava 18.0驱逐。
我是Java和Gradle的新手。我正在使用Gradle的java
和application
插件来构建和运行带有gradle run
的主类。我该如何解决这个问题?
这是我的build.gradle
:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "com.example.rest.App"
repositories {
mavenCentral()
}
dependencies {
compile (
[group: 'io.dropwizard', name: 'dropwizard-core', version: '0.8.0-rc1'],
[group: 'com.thinkaurelius.titan', name: 'titan-core', version: '0.5.1'],
[group: 'com.thinkaurelius.titan', name: 'titan-berkeleyje', version: '0.5.1'],
[group: 'com.tinkerpop', name: 'frames', version: '2.6.0']
)
testCompile group: 'junit', name: 'junit', version: '3.8.1'
}
run {
if ( project.hasProperty("appArgs") ) {
args Eval.me(appArgs)
}
}
答案 0 :(得分:5)
默认情况下,Gradle会在发生冲突时为依赖项选择最高版本。您可以强制将特定版本与自定义resolutionStrategy一起使用(改编自http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html):
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:15.0'
}
}
这并没有对guava 15.0添加依赖关系,但是说如果有依赖(甚至是传递)强制使用15.0。
您可以通过gradle dependencies
和gradle dependencyInsight ...
获取有关依赖项来源的更多信息。
仅供参考,看起来你有几个不同版本的Guava(11.0.2,14.0.1,15.0和18.0)。
HTH