【问题标题】:Execute task from standalone gradle file从独立的 gradle 文件执行任务
【发布时间】:2020-07-15 21:24:58
【问题描述】:

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

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

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

我尝试将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 子文件夹移动到根项目文件夹时,任务的执行工作正常并根据需要跳过完整的配置阶段,但我不想将文件移动到根目录-project 文件夹以保持排序。

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


2020-04-06 更新:

事实上,在consul-starter.gradle 旁边放了一个空的settings.gradle 文件后,问题就解决了。我首先尝试使用 gradle 的 --config 命令行开关指定设置文件。但由于某种原因,这不起作用......

【问题讨论】:

    标签: gradle


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2014-01-15
      • 2011-06-21
      相关资源
      最近更新 更多