Gradle 有没有办法写出更简洁的格蕾德?

Gradle 有没有办法写出更简洁的格蕾德?,gradle,Gradle,我对groovy还不太了解,只是想现在就过得去。我现在正在编写以下gradle,但我想知道是否有更简洁的方法来编写它: task staging(type: Sync) { from(stagingDir) {} into toStagingDir } task syncJars(type: Sync) { from(configurations.compile) {} from(fixedLibDir) {} into toStagingLibsDir

我对groovy还不太了解,只是想现在就过得去。我现在正在编写以下gradle,但我想知道是否有更简洁的方法来编写它:

task staging(type: Sync) {
    from(stagingDir) {}
    into toStagingDir
}

task syncJars(type: Sync) {
    from(configurations.compile) {}
    from(fixedLibDir) {}
    into toStagingLibsDir
}

task copyMainJar(type: Copy) {
    from(libsDir) {}
    into toStagingLibsDir
}

task myZip(type: Zip) {
    archiveName "bacnet.zip"
    from(buildDir) {
        include project.name+'/**'
    }
}

syncJars.dependsOn('staging')
copyMainJar.dependsOn('syncJars')
myZip.dependsOn('copyMainJar')
assemble.dependsOn('myZip')
也许有办法这样写:

task prepareStaging {
    staging from stagingDir into toStagingDir
    syncJars from configurations.compile from fixedLibDir into toStagingLibsDir
    copyMainJar from libsDir into toStagingLibsDir
    myZip archiveName "bacnet.zip" from buildDir { include project.name+'/**' }
}

assemble.dependsOn('prepareStaging')
理想情况下,我喜欢自文档代码。在第二个示例中,对于下一个开发人员来说很明显,我的意思是这些小任务中的每一个都不可重用。这是非常清楚的(即自我记录)。在第一种方式中,我编写的代码肯定不清楚,因为这些任务可以从其他项目文件中重复使用

有没有办法用那种简单的形式写呢


注意:我仍然希望所有的最新检查都像往常一样进行

如果我理解正确,
toStagingDir
toStagingLibDir
只是在
buildDir
目录下创建的临时目录(在
myZip
任务中),那么下面的工作应该与您的相同:

任务myZip(类型:Zip){
archiveName“bacnet.zip”
进入(‘暂存’){
来自stagingDir
}
进入('staging/libs'){
来自fixedLibDir
从configurations.compile
来自libsDir
//或者,如果您只想包括当前项目JAR
从jar.outputs.files
}
}
这里的想法不是自己创建一个临时目录,而是让gradle为您创建

只要你不打电话给cleanMyZip,它就会进行最新的检查,并尽可能少地进行检查。上次我检查
Zip
时,它的行为与
Sync
非常相似,因为它将从Zip中删除源中不再存在的任何文件。这可能与
copyMainJar
任务的行为稍有不同,因为它属于
Copy
类型,这意味着如果您从
libsDir
中删除一个文件,那么在我的例子中,它将从zip中消失,但在您的代码中它不会消失

不知道这是否与您的要求接近,但希望它至少有一点用处:)

精化:

gradle中的任务总是由design AFAIK公开的。有一个问题,但没有太多的行动围绕它。您可以使用支持私有可见性的标准groovy方法,但它们不如任务强大。尽管如此,您会发现(或任何使用
call()
method的方法),因此您可以执行以下操作:

def函数={
println“函数在这里!”
}

task myTask(dependsOn:function)肯定有一些用处(我会好好利用它),但我真正想知道的是,是否有一种方法可以在任务中编写任务,以便与下一个开发人员沟通,它确实是一个应该捆绑在一起的工作单元。我明白了。有关详细信息,请参阅原始帖子。
function here!
:a:myTask
myTask here!