Java Gradle中依赖项的多个版本

Java Gradle中依赖项的多个版本,java,gradle,Java,Gradle,我正在构建一个java项目,使用gradle进行版本控制 我正在从Drools规则引擎的旧版本5.5.0迁移到6.2.0。 与“大爆炸”和更改Every类以使用新版本不同,我希望每次更改一个类,并在迁移所有类时删除旧的依赖关系 在我的gradle.build中,我设置了: compile 'org.drools:drools-compiler:6.2.0.Final' compile 'org.kie:kie-api:6.2.0.Final' compile 'org.drools:droo

我正在构建一个java项目,使用gradle进行版本控制

我正在从Drools规则引擎的旧版本5.5.0迁移到6.2.0。 与“大爆炸”和更改Every类以使用新版本不同,我希望每次更改一个类,并在迁移所有类时删除旧的依赖关系

在我的gradle.build中,我设置了:

compile 'org.drools:drools-compiler:6.2.0.Final'
compile 'org.kie:kie-api:6.2.0.Final'  
compile 'org.drools:drools-core:6.2.0.Final'

compile 'org.drools:drools-core:5.5.0.Final'
compile 'org.drools:drools-compiler:5.5.0.Final'
但它只下载最新版本的库。
gradle是否支持同一库的多个版本?

否gradle不支持同一库的多个版本。默认情况下,它将选择最新版本,但您可以使用

org.gradle.api.artifacts.ResolutionStrategy.failOnVersionConflict()
在发生冲突的情况下,Gradle默认使用冲突的最新版本 版本。但是,您可以更改此行为。使用此方法 将解决方案配置为在任何版本冲突时立即失败,例如。 同一依赖项(组和名称)的多个不同版本 相同配置中的(相等)

从此处开始下载同一库的多个版本: 参考:

顺便说一句
  • 以上下载两个版本,而仅使用一个版本进行编译
Gradle提供了以下冲突解决策略:

最新的:使用依赖项的最新版本。 这是Gradle的默认策略,通常是一个合适的选择 只要版本向后兼容

失败:版本冲突导致生成失败。 此策略要求删除所有版本冲突 在构建脚本中显式解析。寻找 有关如何显式选择特定版本的详细信息


请参阅:

No,因为它没有意义:编译器只能使用一个具有给定名称的类。不能让一个项目使用两个同名的不同类。如果类路径中较新的jar在较旧的jar之前,编译器将根据较新的类检查代码并忽略较旧的类,反之亦然。您应该更改版本,并在一个单独的git/svn分支中进行迁移。我有一个类似的情况,我想使用ExoPlayer 2实现所有功能,而ExoPlayer 1仅用于FLAC,它们有两个不同的包名,因此应该不会有冲突,而且两个库都有意义。忽略所有这些想法的丑陋性,有没有办法只在特定的依赖版本冲突上失败?
repositories {
  mavenCentral()
}
  configurations {
  compile5
  compile6
}
  dependencies {
  compile5 'org.osgi:org.osgi.core:5.0.0'
  compile6 'org.osgi:org.osgi.core:6.0.0'
}
  task libs(type: Sync) {
  from configurations.compile5
  from configurations.compile6
  into "$buildDir/libs"
}