如何强制Gradle在每次构建时运行任务?

如何强制Gradle在每次构建时运行任务?,gradle,build,task,Gradle,Build,Task,我在Mac Yosemite上使用Gradle 2.7。在构建我的WAR时,假设所有测试都通过并且WAR的组装成功,我想将我的WAR复制到本地$CATALINA_HOME/wbeapps目录。因此,我在build.gradle脚本中定义了这一点: task deployToTomcat(type: Copy) { from war.archivePath into "$System.env.CATALINA_HOME/webapps" } build.dependsOn dep

我在Mac Yosemite上使用Gradle 2.7。在构建我的WAR时,假设所有测试都通过并且WAR的组装成功,我想将我的WAR复制到本地
$CATALINA_HOME/wbeapps
目录。因此,我在
build.gradle
脚本中定义了这一点:

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "$System.env.CATALINA_HOME/webapps"
}

build.dependsOn deployToTomcat
当我运行
gradle build
时,我可以看到任务正在运行,但在我的
$CATALINA_HOME/webapps
目录中没有显示任何内容。以下是输出:

davea$ gradle build
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:update
liquibase-plugin: Running the 'main' activity...
INFO 10/28/15 2:11 PM: liquibase: Successfully acquired change log lock
INFO 10/28/15 2:11 PM: liquibase: Reading from cbc_db.DATABASECHANGELOG
INFO 10/28/15 2:11 PM: liquibase: Successfully released change log lock
Liquibase Update Successful
liquibase-plugin: Running the 'test' activity...
INFO 10/28/15 2:11 PM: liquibase: Successfully acquired change log lock
INFO 10/28/15 2:11 PM: liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 10/28/15 2:11 PM: liquibase: Successfully released change log lock
Liquibase Update Successful
:testClasses
:test UP-TO-DATE
:check UP-TO-DATE
:deployToTomcat UP-TO-DATE
:build UP-TO-DATE
“最新”是否意味着它已运行?如何强制运行任务

编辑:根据给出的答案,我改变了我的任务。WAR文件被复制到名为“null/webapps”的文件夹中,该文件夹与我的“build.gradle”文件位于同一目录中。这是输出

davea$ echo $CATALINA_HOME
/opt/apache-tomcat-6.0.44
davea$ gradle build
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war UP-TO-DATE
:deployToTomcat UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:update
liquibase-plugin: Running the 'main' activity...
INFO 10/29/15 9:09 AM: liquibase: Successfully acquired change log lock
INFO 10/29/15 9:09 AM: liquibase: Reading from cbc_db.DATABASECHANGELOG
INFO 10/29/15 9:09 AM: liquibase: Successfully released change log lock
Liquibase Update Successful
liquibase-plugin: Running the 'test' activity...
INFO 10/29/15 9:09 AM: liquibase: Successfully acquired change log lock
INFO 10/29/15 9:09 AM: liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 10/29/15 9:09 AM: liquibase: Successfully released change log lock
Liquibase Update Successful
:testClasses
:test UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE

BUILD SUCCESSFUL

Total time: 0.865 secs

不需要强制运行任务。相反,请适当配置任务:

task deployToTomcat(type: Copy) {
    from war.outputs
    into "$System.env.CATALINA_HOME/webapps"
}

war.finalizedBy deployToTomcat
archivePath
定义放置war的路径,但要获得war,需要使用任务的
输出
属性

finalizedBy
始终在给定任务完成后运行该任务。在这种特殊情况下,这保证了正在构建的工件将被准备好


最新
表示任务未运行。这没什么关系。

谢谢。我改变了任务以反映你写的内容。然而,我注意到在这两种情况下(我的尝试和你的回答),war都被复制到“null/webapps/myproject.war”。这很奇怪,因为当我回显$CATALINA_HOME时,它会输出一个值。我已将输出包含在对我的问题的编辑中。@Dave,很抱歉,CATALINA_HOME变量被正确引用。有些东西似乎配置错误。如果从IDE调用上述任务,可能会导致问题-系统环境在IntelliJ IDEA中不可见。如果你觉得我的答案有用,请接受。我正在终端(bashshell)中运行“gradlebuild”。在我接受之前,我想先解决这个问题——也许这是我的环境所特有的,但是如果变量echo是,我想应该在我的Gradle脚本中识别它。我会投票给你的,tho。@Dave,你的操作系统是什么?我真的很抱歉,但是我刚刚尝试了很多环境变量,这些都对我有用。@Dave,请用下面的代码在gradle脚本中打印所有环境变量:
System.env.each{k,v->println“$k=$v”}
CATALINA_HOME
在那里吗?另外,如何设置env变量?通过任何配置文件或导出语句?请记住,此env变量必须对JVM可见。你使用gradle守护程序吗?