gradle - 从独立的 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.gradle
从gradle
子文件夹移动到根项目文件夹时,任务的执行工作并根据需要跳过完整的配置阶段,但我不想将文件移动到根项目文件夹以保持排序。
还有什么我可以做的吗?我“只是”希望从独立的 gradle 文件中执行任务......
2020-04-06 更新:
确实在解决问题旁边
放了一个空文件后。我首先尝试使用 gradle 的命令行开关指定设置文件。但由于某种原因,这不起作用......settings.gradle
consul-starter.gradle
--config
解决方案
我想,在不配置其余构建的情况下运行任务的唯一机会是startConsul
将其作为单独/“不相关”构建的一部分运行。如您所见,只需更改构建文件并不足以让 Gradle 考虑新的/不相关的构建——只要唯一的settings.gradle
文件位于父目录中。
要创建单独的构建,您只需将一个空settings.gradle
文件添加到您的gradle/
目录并像以前一样运行您的任务:
./gradlew -b gradle/consul-starter.gradle startConsul
我已经用 Gradle 6.3 试过了,它对我有用。(当您说您指定了“一个空的虚拟设置文件”时,不确定您是否也尝试过?)
推荐阅读
- api - Square Connect API - SqPaymentForm Apple Pay
- javascript - Chartist.js:饼图/圆环图鼠标悬停时的阴影/轮廓
- json - Node.js 在发送 json 对象之前等待 redis client.get
- swift - RxSwift:管理应用程序中的对象更新
- apache - 将 Apache LANG 更改为 en_GB.UTF-8
- typo3 - TYPO3 问题 - 页面有错误的用户组 (7.6.24)
- vba - 工作表更改事件未在其他计算机上运行
- reactjs - 如何在 React-table 中扩展不同的行时给出不同的子组件?
- python - Python 3:在异常中引发异常
- google-cloud-platform - GCP 机器映像和凭据