我想运行一个gradle任务,该任务获取其他源并在gradle尝试解析依赖项之前设置它们。
在build.gradle中,有一个任务可以获取子项目的源代码。在Gradle尝试解析依赖项之前,需要运行该任务,因为子项目是依赖项的一部分。该任务涉及从远程存储库获取源代码并替换一些build.gradle文件以使构建成为可能。
现在发生的是:
当然,解析依赖关系是“配置”构建阶段的一部分,因此很清楚为什么该任务在之后运行。问题是如何让它在之前运行。
当然,如果我用单独的bash脚本替换我的gradle任务并在gradle做任何事情之前手动运行它,我可以使它工作。但是,这意味着我在gradle和bash脚本中复制了一些变量(比如版本名和git标记名)。这些变量在gradle中用于其他目的,并且将它们放在两个地方是不好的。还有其他原因我想避免这种情况,其中一个原因是 - 使用bash脚本意味着gradle在从头到尾完成构建时失败...
答案 0 :(得分:1)
首先你不正确解决依赖关系是"配置"相。如果您使用FileCollection
的惰性求值,那么它将在执行阶段实际解决。第一次调用resolve()时将解析配置。有关导致配置解析的方法,请参阅javadoc。 AFAIK核心gradle代码无法解决"配置"阶段,但您的自定义代码可能会导致这种情况(我建议您重构,如果是这种情况)
您可以这样做:
dependencies {
// this is lazy evaluated
compile fileTree(dir: "$buildDir/dynamicJars", include: "*.jar")
}
task getDynamicJars(type: Copy) {
from zipTree('path/to/somefile.zip')
into "$buildDir/dynamicJars"
}
compile.dependsOn getDynamicJars