【发布时间】:2019-07-30 13:12:35
【问题描述】:
我有一个创建 zip 工件的 Gradle 项目。我通过artifacts.add('default', zipTask) 定义工件。我通过includeBuild将此项目添加到另一个项目中,并使用zip作为依赖项(dependencies { myConfiguration 'org.example:testA:+@zip' })。
到目前为止,一切都很好。它有效。
当我将插件java 添加到第一个项目时,问题就开始了。由于某种原因,它会阻止 Gradle 找到 zip 工件。
错误是:
Execution failed for task ':doubleZipTask'.
> Could not resolve all files for configuration ':myConfiguration'.
> Could not find testA.zip (project :testA).
为什么?如何解决?
完整示例:
项目testA
settings.gradle:
rootProject.name = 'testA'
build.gradle:
plugins {
id 'base'
// Uncomment the line below to break the zip artifact
//id 'java'
}
group = 'org.test'
version = '0.0.0.1_test'
task zipTask(type: Zip) {
from './settings.gradle' // just so the zip isn't empty
}
artifacts.add('default', zipTask)
项目testB
settings.gradle:
rootProject.name = 'testB'
// This line may be commented out in some cases and then the artifact should be downloaded from Maven repository.
// For this question it should be always uncommented, though.
includeBuild('../testA')
build.gradle:
plugins {
id 'base'
}
configurations {
myConfiguration
}
dependencies {
myConfiguration 'org.test:testA:0.0.0.+@zip'
}
task doubleZipTask(type: Zip) {
from configurations.myConfiguration
}
更新 1
我在build.grade 的末尾添加了一些诊断代码:
configurations.default.allArtifacts.each() {
println it.toString() + ' -> name: ' + it.getName() + ', extension: ' + it.getExtension()
}
并在带有java 插件的版本中打印:
ArchivePublishArtifact_Decorated testA:zip:zip: -> name: testA, extension: zip
org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact@2c6aaa5 -> name: testA, extension: jar
但是,我不确定额外的工件是否会破坏某些东西。
当我自己添加第二个工件时,这似乎不是问题。
更新 2
也许 zip 文件不能最好地表达我的意图。毕竟,我可以在一个项目中构建与 java 相关的文件,然后将它们压缩到另一个项目中。 但是,这个问题也适用于战争文件。 (War插件内部使用Java插件,不能单独运行。)
【问题讨论】:
标签: java gradle build.gradle artifact