首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制Gradle为两个依赖项设置相同的版本?

如何强制Gradle为两个依赖项设置相同的版本?
EN

Stack Overflow用户
提问于 2015-02-10 23:42:12
回答 11查看 142.3K关注 0票数 101

我使用以下两个依赖项:

代码语言:javascript
复制
compile 'com.google.guava:guava:14.0.1'
compile 'com.google.guava:guava-gwt:14.0.1'

两者必须是相同的版本才能正确工作。由于我的其他依赖项使用更高的版本,Gradle对每个依赖项使用不同的版本。

我通过运行gradle dependencies找到了这个

代码语言:javascript
复制
compile - Compile classpath for source set 'main'.
 +--- com.google.guava:guava:14.0.1 -> 17.0
 +--- com.google.guava:guava-gwt:14.0.1
 |    +--- com.google.code.findbugs:jsr305:1.3.9
 |    \--- com.google.guava:guava:14.0.1 -> 17.0 

如何强制Gradle为这两个依赖项设置相同的版本?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2015-02-11 23:01:13

您的依赖项之一是迫使番石榴版本更新。使用gradle dependencies定位哪个库正在驱逐您的版本。

问题是,如果强制使用14.0.1,另一个库可能无法正常工作。您不能仅仅使用17.0版本作为您的依赖吗?

我不是在build.gradle中维护单独的版本号,而是使用一个dependencies.gradle文件,该文件将有版本号的映射,并将其拖到build.gradle中。这样我只需要维护单一的番石榴版本。所以你的例子是:

dependencies.gradle

代码语言:javascript
复制
ext {
    ver = [
        guava: '14.0.1'
    ]
}

然后在build.gradle文件中可以拥有:

代码语言:javascript
复制
apply from: "dependencies.gradle"

dependencies {
    compile group: 'com.google.guava', module: 'guava', version: ver.guava
    compile group: 'com.google.guava', module: 'guava-gwt', version: ver.guava
}

然后,当我想要移动到17.0时,我只需要更改dependencies.gradle。

我也非常喜欢将传递依赖项设置为false

代码语言:javascript
复制
configurations.compile { transitive = false }

通过这种方式,您不会在编译时驱逐某些依赖项,但如果驱逐库不完全向后兼容,则在运行时可能会出现问题。让我们面对它,如果您正在编写代码,您应该知道您使用了哪些库,并且您应该清楚地了解您的依赖关系。它保护您不受依赖项的影响,升级和破坏您。

票数 20
EN

Stack Overflow用户

发布于 2015-02-11 01:08:29

将此部分添加到dependencies块的正上方。

Groovy/Gradle:

代码语言:javascript
复制
configurations.all {
  resolutionStrategy { 
    force 'com.google.guava:guava:14.0.1'
    force 'com.google.guava:guava-gwt:14.0.1'
  }
}

Kotlin脚本:

代码语言:javascript
复制
configurations.all {
  resolutionStrategy {
    force("com.google.guava:guava:14.0.1")
    force("com.google.guava:guava-gwt:14.0.1")
  }
}
票数 138
EN

Stack Overflow用户

发布于 2016-09-02 12:14:53

代码语言:javascript
复制
configurations.all {
  resolutionStrategy.eachDependency { details ->
    if (details.requested.group == 'com.google.guava') {
      details.useVersion "14.0.1"
    }
  }
}

dependencies {
  compile 'com.google.guava:guava'
  compile 'com.google.guava:guava-gwt'
}
票数 77
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28444016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档