【问题标题】:Gradle: Not able to run zipTree in doFirst blockGradle:无法在 doFirst 块中运行 zipTree
【发布时间】:2016-09-12 06:29:40
【问题描述】:

我正在尝试分解 doFirst 块中的一些 jar 文件,如下所示 -

task copyBinaries(type: Copy){

    def Jar1 = ""
    def Jar2 = ""
    def Jar3 = ""
    doFirst {
        Jar1 = configurations.Lib1.singleFile
        Jar2 = configurations.Lib2.singleFile
        Jar3 = configurations.Lib3.singleFile   
    }

    inputs.files configurations.Lib1
    inputs.files configurations.Lib2
    inputs.files configurations.Lib3

    from(zipTree(file(Jar1))) {
            into('jar_folder1')
    }
    from(zipTree(file(Jar2))) {
            into('jar_folder2')
    }
    from(zipTree(file(Jar3))) {
            into('jar_folder3')
    }
    into('build/libs/')
    }
}

为了避免在配置阶段解决依赖关系,我从 doFirst 块中的配置中提取文件名。问题是,由于 Copy 任务在配置阶段需要复制的源和目标,所以 gradle 将 Jar1、Jar2、Jar3 视为空字符串并抛出错误。 我正在寻找一种方法让 Copy 任务在执行阶段(在执行 doFirst 块之后)接收参数(源文件)。

我该如何解决这种情况?谢谢。

【问题讨论】:

标签: gradle configuration dependencies


【解决方案1】:

我遇到过类似的情况,我必须从作为另一个输出创建的路径复制。 我通过在任务的 doLast 块中声明复制逻辑解决了这个问题:

task copyStuff {
    doLast {
        copy {
            from zipTree('path/to/archive')
            into 'destination/dir'
        }
    }
}

您只需确保您的任务在创建所需输出的任务之后运行,例如使用 dependsOn。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2012-01-28
    • 1970-01-01
    相关资源
    最近更新 更多