gpt4 book ai didi

java - 使用 gradle 的 3 个项目的复合构建不起作用

转载 作者:行者123 更新时间:2023-12-01 14:33:48 25 4
gpt4 key购买 nike

我正在尝试使用 gradle 创建复合构建。我有 3 个项目,假设它们是 A、B 和 C。它们共享一些模块,因为我不希望 gradle 三次构建相同的共享模块,这就是我尝试创建复合构建的原因。他们有非常复杂的 build.gralde 和 settings.gradle 文件,这就是为什么我不能简单地使用 gradle 多项目构建。我已经创建了 top-project,它包含在 settings.gradle 中:

rootProject.name = 'top-project'

includeBuild 'A'
includeBuild 'B'
includeBuild 'C'

我的 build.gradle 看起来像这样。

task buildAll {
dependsOn gradle.includedBuild('A').task(':build')
dependsOn gradle.includedBuild('B').task(':build')
dependsOn gradle.includedBuild('C').task(':build')
}

每个项目 - A、B 和 C 都可以使用 ./PROJECT_NAME/gradlew build 命令构建。但是当我尝试运行我定义的任务时 ./gradlew buildAll 我得到的错误是:

Task with path ':build' not found in project ':B'

我认为这是因为项目 B 在他的 build.gradle 文件中没有定义任务构建,但他的子项目有这个任务,这就是它被构建的原因。

当我试图用这样的东西运行我的顶级 build.gradle 时:

dependsOn gradle.includedBuild('subproject-of-B').task(':build')

我会收到类似 Project with path ... could not be found ... 的错误,因为它确实知道 ./B/.settings.gradle 等中定义的一些属性。

所以我的问题是,如何轻松创建这 3 个单独项目的复合构建,而它们的共享核心只会构建一次?

对不起,如果这是一个愚蠢的问题,但我真的是 gradle 的新手,无法解决这个问题。

感谢您的帮助。

最佳答案

我们遇到了类似的问题并找到了可能的解决方案。在您的项目 A 中,您应该注册一个运行任务的任务(例如:runBuilds):从子项目构建。

tasks.register("runBuilds") {
dependsOn project.getTasksByName("build", true)
}

之后你就可以在你的根目录下使用那个任务了

dependsOn gradle.includedBuild("A").task(":runBuilds")

关于java - 使用 gradle 的 3 个项目的复合构建不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52414235/

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