Dmitry Minkovsky
Dmitry Minkovsky

Reputation: 38183

How do I resolve dependency conflicts with Gradle?

I am developing a project with Dropwizard and Titan DB. Both depend on Google Guava. One depends on version 15 and the other on 18. This error occurs at runtime:

! 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

I researched the error and found that it was being caused by titan's Guava 15.0 dependency being evicted by Guava 18.0.

I am new to Java and Gradle. I am using Gradle's java and application plugins to build and run the main class with gradle run. How can I resolve this problem?


Here is my 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)  
    }  
}

Upvotes: 6

Views: 7484

Answers (1)

bigguy
bigguy

Reputation: 973

By default, Gradle will select the highest version for a dependency when there's a conflict. You can force a particular version to be used with a custom resolutionStrategy (adapted from http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html):

configurations.all {
  resolutionStrategy {
    force 'com.google.guava:guava:15.0'
  }
}

This doesn't add a dependency on guava 15.0, but says if there is a dependency (even transitively) to force the use of 15.0.

You can get more information on where your dependencies come from with gradle dependencies and gradle dependencyInsight ....

FYI, it looks like you have a few different versions of Guava requested (11.0.2, 14.0.1, 15.0 and 18.0).

HTH

Upvotes: 9

Related Questions