copy在gradle中工作,但zip给出了奇怪的错误

copy在gradle中工作,但zip给出了奇怪的错误,gradle,Gradle,我试图在gradle中使用zip,我的构建工作得很好,直到我将其添加到“webserver”项目的我的部分(也许我的问题应该是为什么拷贝在前面没有任务的情况下工作?…如果需要在zip前面有任务,而不是下面的拷贝,我真的被拷贝和zip之间的差异弄糊涂了) 另外,我对文档感到非常困惑,因为在文档中,他们几乎总是这样 task myZip(type: Zip) { } 我只是想调用一个zip任务,而不是每次都创建一个新任务,所以文档示例似乎非常糟糕……它们应该是使用zip任务而不是创建一个新任务的

我试图在gradle中使用zip,我的构建工作得很好,直到我将其添加到“webserver”项目的我的部分(也许我的问题应该是为什么拷贝在前面没有任务的情况下工作?…如果需要在zip前面有任务,而不是下面的拷贝,我真的被拷贝和zip之间的差异弄糊涂了)

另外,我对文档感到非常困惑,因为在文档中,他们几乎总是这样

task myZip(type: Zip) {

}
我只是想调用一个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/*'
        }
    }

}

assembly之所以
copy
有效,是因为它是在
Project
中定义的全局实用程序函数(请参阅)。因此,您可以在任何地方调用
copy
,这样就可以了


另一方面,没有等效的
zip
方法。也许是因为压缩通常需要比复制更多的配置,比如指定压缩文件名,或者他们只是错过了它。这意味着您必须为zip使用
任务zip(type:zip){from…to…}
语法;它只是
项目
类上的一个方法。Gradle没有任何关于方法的信息,也不能像处理任务那样控制方法的执行。因此,与相应的任务相比,方法有一些缺点(例如,没有最新的检查),并且只应在任务不是选项时使用(这比您想象的要少)

至于
zip
,根本没有这样的方法,尤其是在
项目
类中。查找此类信息的最佳位置是

毕竟,当一个zip任务已经存在时,谁想创建一个新的zip任务呢

不知道你说的是什么意思;可能您混淆了任务和任务类型。对每个要创建的zip文件使用单独的任务是完全正常的


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

我认为现在正确的方法是

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/*'
        }
    }

}

汇编最后一个代码段是任务操作中的任务声明;那是行不通的。当我潜入时,我会潜入相当深的地方(我已经阅读了两次文档,现在只是巩固/理解)。这消除了我的许多困惑。谢谢,了解Gradle构建分为三个阶段非常重要:初始化、配置和执行。后一个代码段尝试在生成的执行阶段添加任务。那太晚了-添加任务是一种配置形式,因此必须在配置阶段完成。在配置阶段结束时,Gradle创建了一个执行计划,确定要执行哪些任务以及以什么顺序执行。感谢您的帮助,我想我现在已经找到了所有的细节(是的,我已经阅读了关于3个阶段的内容)。我想它已经开始深入人心了(我本想在那里找到一种方法,但这有缺点)…现在我要向其他人宣传gradle;)。我喜欢它,只是花了一些时间去理解它。
task myZip(type: Zip) {
    from('.') {
        include 'run*.sh'
        include 'app/*'
    }
}

assemble.dependsOn('myZip')
    //This last line is important of course!!!!
assemble << {
    println "I'm zipping up now"
    task zip(type: Zip) {
        from('.') {
            fileMode = 0755
            include 'run*.sh'
            include 'app/*'
        }
    }

}