2

我正在尝试在 gradle 中使用 zip,并且我的构建工作正常,直到我将它添加到我的“webserver”项目部分(也许我的问题应该是为什么副本在没有任务的情况下工作??????。 ..如果您需要 zip 前面的任务而不是下面的复制,我真的对复制和 zip 之间的区别感到困惑)

assemble << {
    zip {
       from '.'
       includes ['app/*','conf/*','public/*','play-1.2.4/*','run*.sh']
    }
}

错误是

  • 出了什么问题:任务':webserver:assemble'的执行失败。

    在任务':webserver:assemble'上找不到参数[build_3nljqgmljp29v06751h102sq8b$_run_closure3_closure16_closure18@7cc8e407]的方法zip()。

我不明白,因为我像这样成功地使用了副本

copy { from fixedLibDir into genLibDir }

此外,我对文档中的文档感到非常困惑,他们几乎总是有

task myZip(type: Zip) {

}

我只是想调用一个 zip 任务而不是每次都创建一个新任务,所以文档示例似乎很糟糕......它们应该是使用 zip 任务而不是创建一个新任务的示例(毕竟,谁想要创建一个一个已经存在的新 zip 任务??) 或者我在这里遗漏了什么? 无论如何,当我开始使用 gradle 时,这让我很困惑,我猜这会让其他人感到困惑。展示使用它和定义一个新的可能会很好(尽管我仍然不明白我为什么要定义一个新的)。

更多信息/更新:我也尝试了这个运行的代码,我看到了打印输出消息,但是我的 webserver/output/libs 目录中没有我期望的 zip 文件???

assemble << {
    println "I'm zipping up now"
    task zip(type: Zip) {
        from('.') {
            fileMode = 0755
            include 'run*.sh'
            include 'app/*'
        }
    }

}

后来,迪恩

4

3 回答 3

6

之所以有效,是因为它是在(参见此处copy中定义的全局效用函数。所以你可以从任何地方打电话,它会工作。Projectcopy

另一方面,没有等效的zip方法。也许,因为压缩通常需要比复制更多的配置,例如指定 zip 存档名称,或者他们只是错过了它。这意味着您必须使用task zip(type: Zip){ from ... into ... } zip 的语法。

于 2012-06-26T00:43:06.827 回答
2

相比Copycopy不是任务;它只是类上的一种方法。Gradle 没有任何关于方法的信息,也无法控制方法的执行,就像它对任务所做的那样。因此,方法相对于相应的任务有一些缺点(例如,没有最新的检查),并且应该只在任务不是一个选项时使用(这比您想象的要少)。Project

至于zip,根本就没有这样的方法,尤其是Project类上没有。查找此类信息的最佳位置是Gradle DSL 参考

毕竟,谁想在已经存在的情况下创建一个新的 zip 任务

不知道你的意思是什么;也许你混淆了任务任务类型。为每个要创建的 zip 文件使用单独的任务是完全正常的。

PS:我建议在处理实际构建之前退后一步并了解有关 Gradle 的更多信息。

于 2012-06-26T00:45:44.140 回答
-1

我认为现在这样做的正确方法是

task myZip(type: Zip) {
    from('.') {
        include 'run*.sh'
        include 'app/*'
    }
}

assemble.dependsOn('myZip')
    //This last line is important of course!!!!

老实说,我现在不确定以下内容会做什么,因为它除了 println 什么都不做

assemble << {
    println "I'm zipping up now"
    task zip(type: Zip) {
        from('.') {
            fileMode = 0755
            include 'run*.sh'
            include 'app/*'
        }
    }

}
于 2012-06-26T12:17:40.750 回答