我在一个多项目构建中有两个项目。一个看起来像这样:
// 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使用,但是我只是得到一个“不存在的程序包“:project-b:compileJava中的错误。根据输出,似乎它没有尝试在project-a中运行任何任务,几乎就像它无法识别依赖项存在一样
答案 0 :(得分:0)
看起来您正在混合项目和任务依赖项。尽管您正确地使project-b
依赖于project-a
,但这并不意味着您的自定义generateJar
和generateArtifact
任务会自动执行。您仍然需要像这样在project-a
as an "outgoing" artifact or add it to the output of the main source set which you can depend on in the consuming project中标记您的JAR:
sourceSets {
main {
output.file(generateArtifact.outputFile, builtBy: generateArtifact)
}
}
答案 1 :(得分:0)
将“编译”分为“实现”和“ api”配置后,行为可能已更改。您能否只尝试一次“编译”(尽管已弃用)以验证这一点。如果可行,则表示@sschuberth建议您在构建:projectb时必须显式调用:projecta的generateArtifact。