首页 > 解决方案 > 从独立的 gradle 文件执行任务

问题描述

我正在做一个相当大的项目(140 多个子项目),一切都是用 gradle 构建的。由于子项目的数量,gradle 构建的配置阶段需要一段时间(30 多秒)。Gradle 不仅用于构建项目,还用于启动外部工具,例如具有正确环境的 shell、consul ......这些非构建任务实际上与任何其他项目没有任何依赖关系,因此可以简单地执行而无需配置所有项目。这些任务也存在于它们自己的 gradle 文件中。对于 consul fe ,在根项目的子目录中有一个consul-starter.gradle文件。gradle那就是结构看起来像这样:

根项目
  ├毕业
  │ └ consul-starter.gradle
  ├子项目 1 - N
  ├ 毕业
  ├ build.gradle
  └ settings.gradle

我想在不执行所有子项目的配置阶段的情况下执行startConsul任务,以跳过 30 秒的配置阶段。gradle/consul-starter.gradle

我试图指定gradle/consul-starter.gradle为构建文件:

gradlew -b gradle/consul-starter.gradle startConsul

但是gradle抱怨:

构建文件“/path/to/root-project/gradle/consul-starter.gradle”不是设置文件“/path/to/root-project/settings.gradle”定义的构建的一部分。如果这是一个不相关的构建,它必须有自己的设置文件。

我试图指定一个空的虚拟设置文件,但得到了同样的错误(使用虚拟文件)。

当我consul-starter.gradlegradle子文件夹移动到根项目文件夹时,任务的执行工作并根据需要跳过完整的配置阶段,但我不想将文件移动到根项目文件夹以保持排序。

还有什么我可以做的吗?我“只是”希望从独立的 gradle 文件中执行任务......


2020-04-06 更新: 确实在解决问题旁边

放了一个空文件后。我首先尝试使用 gradle 的命令行开关指定设置文件。但由于某种原因,这不起作用......settings.gradleconsul-starter.gradle--config

标签: gradle

解决方案


我想,在不配置其余构建的情况下运行任务的唯一机会是startConsul将其作为单独/“不相关”构建的一部分运行。如您所见,只需更改构建文件并不足以让 Gradle 考虑新的/不相关的构建——只要唯一的settings.gradle文件位于父目录中。

要创建单独的构建,您只需将一个空settings.gradle文件添加到您的gradle/目录并像以前一样运行您的任务:

./gradlew -b gradle/consul-starter.gradle startConsul

我已经用 Gradle 6.3 试过了,它对我有用。(当您说您指定了“一个空的虚拟设置文件”时,不确定您是否也尝试过?)


推荐阅读