有没有一种方法可以;“合并”;gradle任务以避免许多dependsOn声明

有没有一种方法可以;“合并”;gradle任务以避免许多dependsOn声明,gradle,Gradle,假设这个gradle脚本: task copyGroovyScript(dependsOn: prepare, type: Copy) { from "${scriptSrcLocation}/${scriptSrcName}" into buildFolderZipSource } task copyDependenciesForGroovyScript(dependsOn: copyGroovyScript, type: Copy) { from configur

假设这个gradle脚本:

task copyGroovyScript(dependsOn: prepare, type: Copy) {
    from "${scriptSrcLocation}/${scriptSrcName}"
    into buildFolderZipSource
}

task copyDependenciesForGroovyScript(dependsOn: copyGroovyScript, type: Copy) {
     from configurations.groovyScript.resolve()
     into "${buildFolderZipSource}/groovy-plugin-lib"
}

task copyTestScripts(dependsOn: copyDependenciesForGroovyScript, type: Copy ) {
    from "${scriptSrcLocation}/ReadClient.groovy"
    into "${buildFolderZipSource}/test"
}

task copyTestScriptsBin(dependsOn: copyTestScripts, type: Copy ) {
    from "${scriptSrcLocation}/bin"
    into "${buildFolderZipSource}/test/bin"
}

task copyDependenciesForTestScripts(dependsOn: copyTestScriptsBin, type: Copy) {
    from configurations.testScripts.resolve()
    into "${buildFolderZipSource}/test/lib"
}

task packageAll(dependsOn: copyDependenciesForTestScripts, type:Zip) {
    archiveName "output-${buildTime()}.zip"
    excludes ['*.zip']
    destinationDir buildFolder
    from buildFolder
}
我需要不同的
复制
任务,然后它们才会有不同的输出文件夹


有没有办法避免所有那些
dependsOn
语句,让gradle以某种方式按照文件中声明的顺序执行事情?

没有办法按照声明的方式执行。但你为什么不走这条路:

task packageAll(dependsOn: copyDependenciesForTestScripts, type:Zip) {
    doFirst {
       copy {
          from "${scriptSrcLocation}/${scriptSrcName}"
          into buildFolderZipSource
       }
    }
    //following doFirst and so on..
    archiveName "output-${buildTime()}.zip"
    excludes ['*.zip']
    destinationDir buildFolder
    from buildFolder
}
编辑

在评论中讨论之后,结果是下面的代码应该可以完成这项工作

task prepare {
   doFirst {
       copy {
          from "${scriptSrcLocation}/${scriptSrcName}"
          into buildFolderZipSource
       }
    }
    //following doFirst and so on..
}

task packageAll(dependsOn: prepare, type:Zip) {
    archiveName "output-${buildTime()}.zip"
    excludes ['*.zip']
    destinationDir buildFolder
    from buildFolder
}

或者,类似于
[taskA,taskB,taskC]*。每个{/*共享任务配置*/}
都可以让他做更多的自定义行为。谢谢你,看起来已经更好了。如果您可以执行:
doAllFirst
,您将传递一个任务列表,以避免每次重复
doFirst
。您可以配置单个
doFirst
。我怀疑您是否需要这么多独立的任务。如果按照声明任务的顺序执行脚本,它将变成简单的shell脚本:/n刚刚测试过,但似乎不起作用。我得到“跳过任务”:packageAll,因为它没有源文件