gpt4 book ai didi

java - 如果应用了 java 插件,Gradle 无法在复合构建中找到 zip Artifact

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:02 25 4
gpt4 key购买 nike

我有一个创建 zip Artifact 的 Gradle 项目。我通过 artifacts.add('default', zipTask) 定义 Artifact 。我通过 includeBuild 将此项目添加到另一个项目并使用 zip 作为依赖项 (dependencies { myConfiguration 'org.example:testA:+@zip' })。到目前为止,一切都很好。它有效。

当我将插件 java 添加到第一个项目时,问题就开始了。出于某种原因,它会阻止 Gradle 找到 zip Artifact 。错误是:

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

但是,我不确定额外的 Artifact 是否可以破坏某些东西。

我自己加第二个 Artifact 好像没有问题。


更新2

也许 zip 文件不能最好地表达我的意图。毕竟,我可以在一个项目中构建与 Java 相关的文件,然后将它们压缩到另一个项目中。但是,该问题也适用于 war 文件。 (War插件内部使用Java插件,不能单独运行。)

最佳答案

问题似乎是 Gradle 中的一个错误,其中复合构建和对 Artifact 的引用被破坏。

一些讨论在这里:https://discuss.gradle.org/t/composite-build-cant-use-included-artifact-in-buildsrc-build-gradle/24978

错误报告:https://github.com/gradle/gradle/issues/3768

解决方法是将 Artifact 依赖项移动到任务依赖项:

plugins {
id 'base'
}

configurations {
myConfiguration
}

dependencies {

}

task doubleZipTask(type: Zip) {
dependsOn gradle.includedBuild('testA').task(':zipTask')
from configurations.myConfiguration
}

关于java - 如果应用了 java 插件,Gradle 无法在复合构建中找到 zip Artifact ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57272576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com