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

新手上路,请多包涵

我使用以下两个依赖项:

 compile 'com.google.guava:guava:14.0.1'
compile 'com.google.guava:guava-gwt:14.0.1'

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

我通过运行 gradle dependencies 发现了这一点:

 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 为这两个依赖项设置相同的版本?

原文由 confile 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

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

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

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

依赖项.gradle

 ext {
    ver = [
        guava: '14.0.1'
    ]
}

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

 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

 configurations.compile { transitive = false }

这样,您就不会在编译时驱逐一些依赖项,尽管如果驱逐库不完全向后兼容,您可能会在运行时遇到问题。让我们面对它,如果您正在编写代码,您应该知道您使用哪些库并且您应该明确说明您的依赖关系。它可以保护您免受您的依赖项之一升级和搞砸。

原文由 Klunk 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

常规/摇篮:

 configurations.all {
  resolutionStrategy {
    force 'com.google.guava:guava:14.0.1'
    force 'com.google.guava:guava-gwt:14.0.1'
  }
}

科特林脚本:

 configurations.all {
  resolutionStrategy {
    force("com.google.guava:guava:14.0.1")
    force("com.google.guava:guava-gwt:14.0.1")
  }
}

原文由 cmcginty 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题