我想运行一个gradle任务,它获取其他源并在gradle尝试解析依赖项之前设置它们 .
在build.gradle中,有一个任务可以获取子项目的源代码 . 在Gradle尝试解析依赖项之前,需要运行该任务,因为子项目是依赖项的一部分 . 该任务涉及从远程存储库获取源代码并替换一些build.gradle文件以使构建成为可能 .
现在发生的是:
-
我运行任务 .
-
Gradle尝试在实际运行任务之前解析依赖关系 .
-
它失败了,因为其中一个依赖项需要子项目(我的任务应该获取的源) .
当然,解决依赖关系是"Configuration"构建阶段的一部分,因此很清楚为什么该任务在之后运行 . 问题是 how to make it run before .
当然,如果我用一个单独的bash脚本替换我的gradle任务并在gradle做任何事情之前手动运行它,我可以使它工作 . 但是,这意味着我在gradle和bash脚本中复制了一些变量(比如版本名和git标记名) . 这些变量在gradle中用于其他目的,并且将它们放在两个地方是不好的 . 还有其他原因我想避免这种情况,其中一个原因是 - 使用bash脚本意味着gradle在从头到尾完成构建时失败了...
1 回答
首先,解决依赖关系的 you are incorrect 是"Configuration"阶段的一部分 . 如果您使用
FileCollection
的延迟评估,那么它将在执行阶段实际解决 . 第一次调用resolve()时将解析配置 . 有关导致配置解析的方法,请参阅javadoc . AFAIK核心gradle代码无法解析"Configuration"阶段的配置,但您的自定义代码可能会导致此问题(如果是这种情况,我建议您重构)你可以这样做: