【问题标题】:How to extend gradle war task with dofirst/dolast如何使用 dofirst/dolast 扩展 gradle 战争任务
【发布时间】:2016-09-23 00:04:17
【问题描述】:

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

我知道要扩展我需要添加 task.doFirst {} 的任务,但这不适用于战争。我使用其他任务进行了一些测试,例如

clean {
    doFirst {
        println "test"
    }
}

这行得通……但在战争中却不行

war {
    doFirst {
        println "test"
    }
}

我的主要想法是从 from 列表中删除 src/main/webapp 并执行 sencha-cmd sencha app build -c --destination $war/ production

【问题讨论】:

  • 您的示例(战争任务)适用于 Gradle 2.14.1

标签: gradle war


【解决方案1】:

您应该使用自己的输入/输出为 sencha 编译创建一个单独的任务,以便 Gradle 可以执行最新检查(因此如果不需要,可以跳过它)。然后,您可以通过 Task.dependsOn(...) 将任务连接到 gradle DAG

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
}

【讨论】:

  • 好的,太好了。但我需要将源代码放在 src/main/webapp 中,否则正常的 intellij 调试无法正确提供源代码。因此,我添加了 exclude('**') 以防止原始源被复制。现在compileSencha完成后,我需要将$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/webapp 下找到源。然后compileSencha$buildDir/sencha 中生成缩小文件,但我需要排除src/main/webapp 中的原始源。所以问题是如何排除src/main/webapp,因为war { exclude("*") } 排除了所有内容......还有from("$buildDir/sencha") 是然后排除
  • 我个人讨厌排除特定文件。在我看来,src/main/webapp 下的所有东西都应该在战争中。也许您应该将 sencha 资源放在 src/main/senchaResources 下,而不是 src/main/webapp 下。为了保持构建干净,您应该始终有选择地将文件夹连接在一起,而不是从一个超级文件夹中排除特定的文件模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多