Gradle:如何忽略未能解决特定依赖项的故障

5
dependencies {
    test "com.test:testA:1.0@jar"
    test "com.test:testB:1.0@jar"
}


task('collectArtifacts', type: Copy) {
     from project.configurations.test
     into 'artifacts/'
}

假设 artifact testA 丢失,testB 可用。
当我使用 ./gradlew collectArtifacts 命令时,它显然会报错,提示“> 找不到 com.test:testA:1.0”。
我该如何让 gradle 实现以下两点要求:
- 如果 testA 存在,则下载 testA 和 testB - 如果 testA 不存在,则忽略对 testA 依赖的解析错误,直接下载 testB。

根据您使用的二进制存储库产品,可以调用其RESTful API来确定依赖性是否存在于前期。 - Benjamin Muschko
2个回答

8
也许有些违反直觉,您可以使用getResolvedConfiguration()getLenientConfiguration()结合使用,以检索不会因某些引用无法解析而失败的配置。
task('collectArtifacts', type: Copy) {
     from project.configurations.test.resolvedConfiguration.lenientConfiguration.getFiles(Specs.satisfyAll())
     into 'artifacts/'
}

请查看文档

这给我一个错误:Caused by: groovy.lang.MissingPropertyException: No such property: file for class: org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingArtifactDependencyResolver$ErrorHandlingLenientConfiguration。然而,稍微修改后适用于我: project.configurations.test.resolvedConfiguration.lenientConfiguration.getFiles(Specs.satisfyAll()) - xask
啊,对了,files 不是一个属性。已经编辑答案并包含了这个信息。如果解决了你的问题,请将答案标记为已接受。 - majk

0
你可以尝试以下方法。不确定test是什么,所以我假设它是testCompile的拼写错误。
task('collectArtifacts', type: Copy) {
    from project.configurations.testCompile.findAll { it.exists() }
    into 'artifacts/'
}

这里的“test”是一个配置名称,只是一个名称,不是“testCompile”的拼写错误。我仍然遇到相同的错误。 - xask

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接