复制在gradle中工作但zip会产生奇怪的错误

时间:2012-06-26 00:21:13

标签: gradle

我正在尝试使用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/*'
        }
    }

}

后, 迪安

3 个答案:

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

}