gradle: copy war to tomcat directory
The WAR task is aware of the artifacts it generates.
task deployToTomcat(type: Copy) {
from war.archivePath
into "${tomcatHome}/webapps"
}
You could of-course use the tomcat plugin. My setup prevents me from using/modify the out of the box war & tomcat option.
I personally like the following flavor (copied from my build.gradle).
tomcat_home='tomcat_location'
tomcat_bin=tomcat_home + '/bin'
tomcat_start=tomcat_bin + '/startup.sh'
tomcat_stop=tomcat_bin + '/shutdown.sh'
tomcat_webapps = tomcat_home + '/webapps'
task tom << {
if (project.hasProperty('start')) {
startTom()
} else if (project.hasProperty('stop')) {
stopTom()
} else if (project.hasProperty('deployNstart')) {
stopTom()
webappsCopy()
startTom()
} else {
throw new RuntimeException('unrecognized option')
}
}
def stopTom() {
executeCmd(tomcat_stop)
}
def startTom() {
executeCmd(tomcat_start)
}
def executeCmd(command) {
proc = command.execute()
proc.waitFor()
}
def webappsCopy() {
copy {
from 'war file location' // could be exploded or war itself
into tomcat_webapps
}
}
-- you call the various options you include in the 'tom' task from the command line --
$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart
this could potentially grow further, as I add more commands/options related to Tomcat. Few pointers:
- move the location etc. to gradle.properties so that it could work in different environments.
- poll your tomcat server port to fine tune options and msgs.
- move to plugin/task code that could be reused.
this limited version works for me right now :-)
I accomplished this with:
task deploy (dependsOn: war){
copy {
from "build/libs"
into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
include "*.war"
}
}
running it like this:
gradle deploy