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

时间:2019-09-27 22:25:56

标签: 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使用,但是我只是得到一个“不存在的程序包“:project-b:compileJava中的错误。根据输出,似乎它没有尝试在project-a中运行任何任务,几乎就像它无法识别依赖项存在一样

2 个答案:

答案 0 :(得分:0)

看起来您正在混合项目和任务依赖项。尽管您正确地使project-b依赖于project-a,但这并不意味着您的自定义generateJargenerateArtifact任务会自动执行。您仍然需要像这样在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。

相关问题