簡體   English   中英

如何解決與Gradle的依賴沖突?

[英]How do I resolve dependency conflicts with Gradle?

我正在使用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

我研究了這個錯誤, 發現它是由泰坦的Guava 15.0依賴被Guava 18.0驅逐引起的。

我是Java和Gradle的新手。 我正在使用Gradle的javaapplication插件來構建和運行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)  
    }  
}

默認情況下,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'
  }
}

這並沒有增加對番石榴15.0的依賴,但是說如果有依賴(甚至是傳遞)強制使用15.0。

您可以通過gradle dependenciesgradle dependencyInsight ...獲取有關依賴項來源的更多信息gradle dependencyInsight ...

僅供參考,看起來你有幾個不同版本的Guava(11.0.2,14.0.1,15.0和18.0)。

HTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM