Dyip302
Dyip302

Reputation: 217

Gradle - unable to track down transitive dependency

I have two modules: common and domain. Domain is a dependency of common. In domain, I'm trying to add the latest version of Spring Data Elasticsearch but it keeps reverting back to an old version. My domain's build.gradle file looks like this:

domain build.gradle

apply plugin: 'spring-boot'

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
}
}

dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-redis")
compile("org.springframework.data:spring-data-elasticsearch:2.0.1.RELEASE")
compile 'org.slf4j:slf4j-api'
compile 'com.google.guava:guava:19.0'

compile 'com.google.code.gson:gson:2.4'
testCompile "org.mockito:mockito-core:1.+"
}

The version for elasticsearch here is 2.0.1.RELASE However, if I run dependencyInsight in common, it is retrieving 1.3.4.RELEASE instead:

gradle dependencyInsight --dependency elasticsearch --configuration compile
:common:dependencyInsight

Download https://repo1.maven.org/maven2/org/springframework/data/spring-data-elasticsearch/1.3.4.RELEASE/spring-data-elasticsearch-1.3.4.RELEASE.pom

org.elasticsearch:elasticsearch:1.5.2 (selected by rule) 
\--- org.springframework.data:spring-data-elasticsearch:1.3.4.RELEASE
 \--- project :domain
      \--- compile

org.springframework.data:spring-data-elasticsearch:1.3.4.RELEASE (selected by rule)

org.springframework.data:spring-data-elasticsearch:2.0.1.RELEASE -> 1.3.4.RELEASE
\--- project :domain
 \--- compile

common build.gradle

apply plugin: 'spring-boot'


buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
}
}    

dependencies {
compile project(':domain')
compile 'com.google.code.gson:gson:2.4'
compile 'org.owasp.encoder:encoder:1.2'
compile 'com.ning:async-http-client:1.9.31'
compile 'org.slf4j:slf4j-api'
compile 'org.springframework.security:spring-security-core'
compile 'org.springframework.security:spring-security-acl:4.0.3.RELEASE'
compile 'javax.mail:javax.mail-api:1.5.4'
compile 'com.sun.mail:javax.mail:1.5.4'
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile "org.mockito:mockito-core:1.+"
}

Is there a reason why version 1.3.4.RELEASE is replacing 2.0.1.RELEASE?

Upvotes: 3

Views: 1081

Answers (1)

Andy Wilkinson
Andy Wilkinson

Reputation: 116171

You're applying Spring Boot's Gradle plugin to your common project. That means that its dependency management will be controlling the versions of the project's dependencies. To get the version of Spring Data Elasticsearch that you want, you can override Boot's dependency management by adding the following:

dependencyManagement {
    dependencies {
        dependency 'org.springframework.data:spring-data-elasticsearch:2.0.1.RELEASE'
    }
}

Upvotes: 4

Related Questions