在解决依赖关系之前运行gradle任务

时间:2016-11-09 16:51:19

标签: android gradle build android-gradle pre-build-event

我想运行一个gradle任务,该任务获取其他源并在gradle尝试解析依赖项之前设置它们。

在build.gradle中,有一个任务可以获取子项目的源代码。在Gradle尝试解析依赖项之前,需要运行该任务,因为子项目是依赖项的一部分。该任务涉及从远程存储库获取源代码并替换一些build.gradle文件以使构建成为可能。

现在发生的是:

  • 我执行任务。
  • Gradle尝试在实际运行任务之前解析依赖关系。
  • 它失败了,因为其中一个依赖项需要子项目(我的任务应该获取的源)。

当然,解析依赖关系是“配置”构建阶段的一部分,因此很清楚为什么该任务在之后运行。问题是如何让它在之前运行。

当然,如果我用单独的bash脚本替换我的gradle任务并在gradle做任何事情之前手动运行它,我可以使它工作。但是,这意味着我在gradle和bash脚本中复制了一些变量(比如版本名和git标记名)。这些变量在gradle中用于其他目的,并且将它们放在两个地方是不好的。还有其他原因我想避免这种情况,其中一个原因是 - 使用bash脚本意味着gradle在从头到尾完成构建时失败...

1 个答案:

答案 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