Gradle:使一个项目依赖于多项目构建中另一个项目的输出



我在多项目构建中有两个项目。一个看起来像这样:

// project-a build.gradle
task generateJar(type: Exec) {
commandLine "command", "to", "generate", "jar"
}
task generateArtifact(type: Zip, dependsOn: generateJar) {
outputs.file("/path/to/generated/jar")
}
artifacts { archives generateArtifact }

另一个只是像这样依赖它:

// project-b build.gradle
dependencies {
implementation project(':project-a')
}

我的期望是,当我在项目 b 上运行构建时,它将首先尝试从项目 a 运行 generateArtifact + generateJar,然后获取输出的 jar 以用于项目 b,但是我只是在 :p roject-b:compileJava 中收到"包不存在"错误。根据输出,它看起来没有尝试在项目a中运行任何任务,几乎就像它没有识别依赖项的存在一样

看起来您正在混淆项目和任务依赖项。虽然您正确地使project-b依赖于project-a,但这并不自动意味着您的自定义generateJargenerateArtifact任务将被执行。您仍然需要在project-a中将 JAR 标记为"传出"工件,或者将其添加到主源代码集的输出中,您可以在消费项目中依赖该输出,如下所示:

sourceSets {
main {
output.file(generateArtifact.outputFile, builtBy: generateArtifact)
}
}

将"编译"拆分为"实现"和"api"配置,行为可能已更改。你能不能尝试一次使用"编译"(虽然它已弃用(来验证这一点。 如果它有效,那么@sschuberth这意味着在构建 :p rojectb 时,您可能必须处理以显式调用 :p rojecta 的生成工件。

相关内容

最新更新