我正在将Maven项目迁移到Gradle。我需要管理依赖关系,所以尝试了这样的resolutionStrategy:
def dependencyVersions = [
'org.slf4j:slf4j-api' : '1.7.2',
'javax.inject:javax.inject' : '1',
'com.google.code.findbugs:annotations' : '2.0.1',
'com.typesafe:config' : '1.0.0',
'ch.qos.logback:logback-classic' : '1.0.9',
'com.google.guava:guava' : '14.0',
'com.google.inject:guice' : '3.0',
'com.google.inject.extensions:guice-multibindings' : '3.0',
'com.google.code.gson:gson' : '2.2.2',
'joda-time:joda-time' : '2.1',
'com.thoughtworks.paranamer:paranamer' : '2.5.2',
'org.codehaus.groovy:groovy-all' : '2.0.6',
'commons-validator:commons-validator': '1.4.0',
'org.apache.shiro:shiro-core' : '1.2.1',
'junit:junit-dep' : '4.10',
'org.mockito:mockito-core' : '1.9.5',
'org.hamcrest:hamcrest-core': '1.3',
'org.hamcrest:hamcrest-library': '1.3',
'org.unitils:unitils-core': '3.3'
]
configurations.all {
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
def version = dependencyVersions["$details.requested.group:$details.requested.name"]
if (version != null)
details.useVersion version
}
}
}但现在,当我尝试将安装(放到本地Maven存储库)时,我得到了以下错误:
Execution failed for task ':counter-module:install'.无法发布无法初始化POM default.xml的配置“存档”:无法在/home/workspace/counter/counter-module/build/poms/pom-default.xml上验证项目lt.counter的POM
发布于 2013-06-20 13:45:32
我可能仍然遗漏了你问题的一个方面,但我只是注意到了一些在文档中的东西。
// force certain versions of dependencies (including transitive)
// *append new forced modules:
force 'asm:asm-all:3.3.1', 'commons-io:commons-io:1.4'
// *replace existing forced modules with new ones:
forcedModules = ['asm:asm-all:3.3.1']看来你可以做以下几件事:
def dependencyVersions = [
'org.slf4j:slf4j-api' : '1.7.2',
'javax.inject:javax.inject' : '1',
'com.google.code.findbugs:annotations' : '2.0.1',
'com.typesafe:config' : '1.0.0',
'ch.qos.logback:logback-classic' : '1.0.9',
'com.google.guava:guava' : '14.0',
'com.google.inject:guice' : '3.0',
'com.google.inject.extensions:guice-multibindings' : '3.0',
'com.google.code.gson:gson' : '2.2.2',
'joda-time:joda-time' : '2.1',
'com.thoughtworks.paranamer:paranamer' : '2.5.2',
'org.codehaus.groovy:groovy-all' : '2.0.6',
'commons-validator:commons-validator': '1.4.0',
'org.apache.shiro:shiro-core' : '1.2.1',
'junit:junit-dep' : '4.10',
'org.mockito:mockito-core' : '1.9.5',
'org.hamcrest:hamcrest-core': '1.3',
'org.hamcrest:hamcrest-library': '1.3',
'org.unitils:unitils-core': '3.3'
]
force dependencyVersion.collect {k, v -> "$k:$v"}在我看来,这将完成两个原则。
发布于 2013-06-20 08:47:27
Gradle的默认解析策略是使用最新版本,因此版本N将被使用;版本N1将不使用。
您没有告诉我们您使用的是哪个版本的Gradle,以及您的项目的完整结构。你在做一个多项目的构建吗?
另外,我不理解您的自定义解析策略--为什么版本会为null?
-编辑--
最新版本是默认的解析策略,因此将使用最高版本。
也许可以看看Gradle关于自定义解析策略的示例,比如强制使用特定的版本。
https://stackoverflow.com/questions/17191410
复制相似问题