gradle是否支持版本中的逗号来指定多个范围?

时间:2017-12-21 12:58:22

标签: gradle versioning

Gradle是否支持版本中的逗号来指定多个范围?

像:

dependencies {
  compile 'org.webjars.npm:minimatch:2.+,3.+'
}

或:

  compile 'org.webjars.npm:minimatch:[2,3),[3,4)'

It is allowed in Maven

  

(,1.0],[1.2,)   x <= 1.0或x> = 1.2。多个集以逗号分隔

     

(1.1),(1.1)   如果知道不与该库结合使用,则排除1.1

有关:

dependencies {
    compile(group: 'org.webjars.npm', name: 'glob', version: '5.0.15') {
}

失败了:

Execution failed for task ':dump'.
> Could not resolve all files for configuration ':runtime'.
  > Could not find org.webjars.npm:minimatch:[2,3),[3,4).
  Searched in the following locations:
     https://repo1.maven.org/maven2/org/webjars/npm/minimatch/[2,3),[3,4)/minimatch-[2,3),[3,4).pom
     https://repo1.maven.org/maven2/org/webjars/npm/minimatch/[2,3),[3,4)/minimatch-[2,3),[3,4).jar
     https://jcenter.bintray.com/org/webjars/npm/minimatch/[2,3),[3,4)/minimatch-[2,3),[3,4).pom
     https://jcenter.bintray.com/org/webjars/npm/minimatch/[2,3),[3,4)/minimatch-[2,3),[3,4).jar
 Required by:
     project : > org.webjars.npm:glob:5.0.15

2 个答案:

答案 0 :(得分:1)

我认为Gradle还不支持这样的多个版本范围,而是单个范围。您应该在问题跟踪器中搜索是否已经报告此问题,如果不是,则打开新问题,以便最终得到修复。

要解决此问题,您可以使用该库的较新版本,在最新版本中,它不使用多个范围,但只使用单个范围。
或者,您可以排除传递依赖项并自己包含一个版本,也可以编写一个依赖项解析规则来选择该范围的特定版本。

如果您仍想使用glob的旧版本,那么其中一个应该会有所帮助。

dependencies {
    compile(group: 'org.webjars.npm', name: 'glob', version: '5.0.15') {
        exclude group: 'org.webjars.npm', module: 'minimatch'
    }
    runtime 'org.webjars.npm:minimatch:3.+'
}
configurations.all {
    resolutionStrategy.dependencySubstitution {
        substitute module("org.webjars.npm:minimatch") with module("org.webjars.npm:minimatch:3.0.4") 
    }
}
configurations.all {
    resolutionStrategy.eachDependency {
        if ((it.requested.group == 'org.webjars.npm') && (it.requested.name == 'minimatch')) {
            it.useTarget group: it.requested.group, name: it.requested.name, version: '3.0.4'
        }
    }
}

答案 1 :(得分:0)

Gradle使用Ivy来解决依赖关系:

at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.resolveModule(RepositoryChainComponentMetaDataResolver.java:105)

和Ivy不支持版本列表,至少我在文档中找不到示例:

我像往常一样解决了问题:

dependencies {
    compile(group: 'org.webjars.npm', name: 'glob', version: '5.0.15') {
        exclude module: 'minimatch'
    }
    compile 'org.webjars.npm:minimatch:3.0.4'
}