首页 文章

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

提问于
浏览
1

我想运行一个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 回答

  • 1

    首先,解决依赖关系的 you are incorrect 是"Configuration"阶段的一部分 . 如果您使用 FileCollection 的延迟评估,那么它将在执行阶段实际解决 . 第一次调用resolve()时将解析配置 . 有关导致配置解析的方法,请参阅javadoc . AFAIK核心gradle代码无法解析"Configuration"阶段的配置,但您的自定义代码可能会导致此问题(如果是这种情况,我建议您重构)

    你可以这样做:

    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
    

相关问题