如何使用dofirst/dolast扩展gradlewar任务

如何使用dofirst/dolast扩展gradlewar任务,gradle,war,Gradle,War,我需要使用一些doFirst和doLast命令来扩展gradlewar任务,以便在生产状态下编译sencha前端 我知道要扩展一个任务,我需要添加task.doFirst{},但这不适用于war。我用其他任务做了一些测试,比如 clean { doFirst { println "test" } } 这是有效的。。。但战争不是这样 war { doFirst { println "test" } } 我的主要想法是从列表的中删除

我需要使用一些doFirst和doLast命令来扩展gradlewar任务,以便在生产状态下编译sencha前端

我知道要扩展一个任务,我需要添加task.doFirst{},但这不适用于war。我用其他任务做了一些测试,比如

clean {
    doFirst {
        println "test"
    }
}
这是有效的。。。但战争不是这样

war {
    doFirst {
        println "test"
    }
}

我的主要想法是从
列表的
中删除
src/main/webapp
,并执行sencha cmd
sencha app build-c--destination$war/production
您应该为sencha编译创建一个单独的任务,其中包含它自己的输入/输出,以便Gradle可以执行最新的检查(因此,如果没有必要,可以跳过它)。然后,您可以通过


您的示例(war任务)适用于Gradle 2.14.1ok,这很好。但我需要将源代码放在src/main/webapp中,否则常规intellij调试无法正确提供源代码。因此,我添加了排除('**')为了防止原始源被复制。现在在
编译完成后,我需要将
$buildDir/sencha
内容复制到war文件中。我不是intellij用户,但我讨厌将生成的文件放在src/main/webapp(或src/main/java等)中。这也可能会影响compileSencha的最新检查和源代码管理(如git)。最好将其分开。理想情况下,intellij可以使用多个源文件夹。或者,您可以将src/main/webapp和编译后的sencha资源复制到$buildDir(如$buildDir/intellijWebapp)下的文件夹中将intellij指向该文件夹,而不是
src/main/webapp
下的src/main/webappNo。然后
compileSencha
$buildDir/sencha
中生成缩小文件,但我需要排除
src/main/webapp
中的原始源。因此问题是如何排除
src/main/webapp
因为
war{exclude(“*”)}
排除了一切…也
来自(“$buildDir/sencha”)
则被排除。我个人不喜欢排除特定文件。在我看来,src/main/webapp下的所有内容都应该处于战争状态。也许你应该将sencha资源放在src/main/senchaResources下,而不是放在src/main/webapp下。为了保持构建干净,你应该始终有选择地将文件夹连接在一起,而不是排除特定文件一个uber文件夹中的模式。
task compileSencha(type:Exec) {
    inputs.dir 'src/main/sencha'
    outputs.dir "$buildDir/sencha"
    commandLine 'sencha', 'app', 'build', file('src/main/sencha').absolutePath, file("$buildDir/sencha").absolutePath
}

war {
   from "$buildDir/sencha"
   dependsOn compileSencha
}