Gradle: Override transitive dependency by version classifier

こ雲淡風輕ζ 提交于 2019-11-30 05:36:20

currently classifiers are not yet taken into account when it comes to resolutionStrategies. A workaround for you might excluding the transitive guava lib when declaring your dependencies and adding the guava cdi1.0 version explicitly:

dependencies {
    compile ("org.acme:someDependency:1.0"){
        exclude group: 'com.google.guava', module: 'guava'
    }       
    compile "com.google.guava:guava:15.0:cdi1.0"
}

I came across a more elegant approach which is simply:

compile ("com.google.guava:guava:15.0:cdi1.0") {
  force = true
}

Explanation

Setting force = true for a dependency tells gradle to use the specified version in case of a version conflict

Gradle 4.5.1 has the function DependencySubstitutions. Here an example to replace a dependency:

configurations.each {
    c -> c.resolutionStrategy.dependencySubstitution {
        all { DependencySubstitution dependency ->
            if (dependency.requested.group == 'org.json') {
                dependency.useTarget 'com.vaadin.external.google:android-json:0.0.20131108.vaadin1'
            }
        }
    }
}

This will not work if the same dependency is pointed by some other jar. Sureshot way to exclude the dependency

configurations {
 all*.exclude group: 'com.google.guava', module:'guava-jdk5'
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!