Gradle中的多个版本的依赖项

时间:2015-03-31 17:34:32

标签: java gradle

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

我从旧版本的Drools规则引擎5.5.0迁移到6.2.0。 而不是去大爆炸'并且更改everey类以使用新版本,我想在当时更改一个类,并在迁移所有类时删除旧的依赖项。

在我的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是否支持同一个库的多个版本?

2 个答案:

答案 0 :(得分:11)

要下载同一个库的多个版本:

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"
}

请参阅:How to get multiple versions of the same library

顺便说一下

  • 上面下载了两个版本,只用一个版本进行编译
  

Gradle提供以下冲突解决策略:

     

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

     

失败:版本冲突导致构建失败。   此策略需要所有版本冲突   在构建脚本中明确解析。请参阅ResolutionStrategy   有关如何明确选择特定版本的详细信息。

请参阅:23.2.3. Resolve version conflicts of Chapter 23

答案 1 :(得分:5)

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

更改此内容
org.gradle.api.artifacts.ResolutionStrategy.failOnVersionConflict()
  

如果发生冲突,Gradle默认使用最新的冲突   版本。但是,您可以更改此行为。使用此方法   将解决方案配置为在任何版本冲突上急切失败,例如:   相同依赖项的多个不同版本(组和名称是   相同的配置。

从这里采取https://gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html