gradle 配置java版本_java-如何强制Gradle为两个依赖项设置相同的版本?
java-如何强制Gradle为两个依赖项设置相同的版本?我使用以下两个依赖项:compile 'com.google.guava:guava:14.0.1'compile 'com.google.guava:guava-gwt:14.0.1'两者必须为同一版本才能正常工作。 由于我的其他依赖项使用更高的版本,因此Gradle为每个依赖项使用不同的版本。我通过运行gradle dependenci
java-如何强制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为这两个依赖项设置相同的版本?
8个解决方案
87 votes
将此部分添加到dependencies.gradle文件
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:14.0.1'
force 'com.google.guava:guava-gwt:14.0.1'
}
}
cmcginty answered 2019-10-24T15:22:18Z
48 votes
configurations.all {
resolutionStrategy {
eachDependency { DependencyResolveDetails 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'
}
Vyacheslav Shvets answered 2019-10-24T15:22:37Z
32 votes
我遇到过类似的情况,其中一个依赖项使用了spring-web 4.2.4,它已损坏。 您必须强制使用所需的特定库版本。 如另一条评论中所述,这可能会导致兼容性问题,但有时是必需的。
强制我发现的库版本的最低介入方式不是使用
compile "org.springframework:spring-web:4.2.3.RELEASE"
将依赖项配置指定为强制:
compile("org.springframework:spring-web:4.2.3.RELEASE"){
force = true
}
我需要临时降级Spring版本(直到下一个版本)时使用它。
Pijusn answered 2019-10-24T15:23:26Z
8 votes
您的依赖项之一是强制更新番石榴版本。 使用gradle dependencies查找哪个库正在逐出您的版本。
您遇到的问题是,如果您强制它使用14.0.1,则另一个库可能无法正常工作。 您能否仅将17.0版本用作依赖项?
我不是在build.gradle中维护单个版本号,而是使用dependencies.gradle文件,该文件将具有版本号的映射并将其拉入build.gradle。 这样,我只需要维护单个番石榴版本。 因此,您的示例将是:
Dependencies.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 answered 2019-10-24T15:21:52Z
2 votes
或者,您可以在spring-dependency-management Gradle插件中使用dependencySets(或在可用BOM BOM时使用mavenBom)支持。 请注意,该插件也会与spring-boot Gradle插件一起自动应用。 有关更多详细信息,请参见此处。
plugins {
id 'io.spring.dependency-management' version '1.0.1.RELEASE'
}
dependencyManagement {
dependencies {
dependencySet(group: 'com.google.guava', version: '14.0.1') {
entry 'guava'
entry 'guava-gwt'
}
}
}
dependencies {
compile 'com.google.guava:guava'
compile 'com.google.guava:guava-gwt'
}
Stevo Slavić answered 2019-10-24T15:23:58Z
1 votes
如果可以对两个依赖项都使用较新版本,则解决问题的最简单方法是更新依赖项:
compile 'com.google.guava:guava:17.0'
compile 'com.google.guava:guava-gwt:17.0'
这将确保它们都在17.0上。 这比尝试将它们都强制使用旧版本要简单,而且作为一个额外的好处,您还可以获得一个新版本,该版本(可能)包含错误修复和新功能。
坦白地说,@ Klunk在回答中提到了这一点,问“您是否可以仅将17.0版本用作依赖项?”,但这只是顺便说一句,很容易遗漏,因此我认为将其作为单独的答案发布是有意义的 。
Marcin Koziński answered 2019-10-24T15:24:39Z
1 votes
另一个选择是使用依赖关系约束:[https://docs.gradle.org/current/userguide/managing_transitive_dependencies.html#sec:dependency_constraints]
dependencies {
implementation 'org.apache.httpcomponents:httpclient'
constraints {
implementation('org.apache.httpcomponents:httpclient:4.5.3') {
because 'previous versions have a bug impacting this application'
}
implementation('commons-codec:commons-codec:1.11') {
because 'version 1.9 pulled from httpclient has bugs affecting this application'
}
}
}
sendon1982 answered 2019-10-24T15:25:12Z
1 votes
我建议不要设置configurations.all,因为从这一刻开始,您将不得不自己解决依赖关系树。
您可以通过configurations.all强制使用所需的番石榴版本,也可以显式添加依赖项并将其设置为forced = true。
此处的示例:[http://www.devsbedevin.net/android-understanding-gradle-dependencies-and-resolving-conflicts/]
Vaiden answered 2019-10-24T15:25:54Z
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)