我正在尝试使用gradle中的zip并且我的构建工作正常,直到我将其添加到我的“webserver”项目部分(也许我的问题应该是为什么副本在它前面没有任务工作? ?? ...如果您需要在zip前面执行任务但不在下面复制,我真的很困惑复制和zip之间的区别。
assemble << {
zip {
from '.'
includes ['app/*','conf/*','public/*','play-1.2.4/*','run*.sh']
}
}
错误是
在任务':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/*'
}
}
}
后, 迪安
答案 0 :(得分:5)
copy
的作用原因是因为它是Project
中定义的全局效用函数(请参阅here)。因此,您可以从任何地方拨打copy
,这样就可以了。
另一方面,没有等效的zip
方法。也许,因为压缩通常需要比复制更多的配置,比如指定zip存档名称,或者他们可能只是错过了它。这意味着您必须使用zip的task zip(type: Zip){ from ... into ... }
语法。
答案 1 :(得分:1)
与Copy
相比,copy
不是任务;它只是Project
类的一个方法。 Gradle没有任何关于任务的信息,也没有控制执行方法。因此,方法相对于相应的任务有一些缺点(例如没有最新的检查),并且只应在任务不是一个选项时使用(这比你想象的要少)。
对于zip
,根本没有这样的方法,特别是Project
类。查找此类信息的最佳位置是Gradle DSL reference。
毕竟,谁想要在已经存在的情况下创建一个新的zip任务
不确定你的意思;也许你会混淆任务和任务类型。为每个zip文件创建一个单独的任务是完全正常的。
PS:我建议退一步,在处理实际构建之前了解Gradle的更多信息。
答案 2 :(得分:-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/*'
}
}
}