我有一个 Gradle 项目,它创建一个 zip 工件。我通过定义工件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).
为什么?如何修复它?
完整示例:
Project 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)
Project 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
}
Update 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
但是,我不确定额外的工件是否会破坏某些东西。
当我自己添加第二个神器时,这似乎不是问题。
Update 2
也许 zip 文件并不能最好地表达我的意图。毕竟,我可以在一个项目中构建与 java 相关的文件,然后将它们压缩到另一个项目中。
但是,该问题也适用于 war 文件。 (War插件内部使用Java插件,因此无法单独运行。)