gradle: copier la guerre dans le répertoire tomcat
J'essaie d'écrire une tâche Gradle qui copie les fichiers war générés dans mon instance tomcat locale:
Cela ne fonctionne pas et je ne sais pas comment le déboguer:
task deploylocal() << {
println "Copy from ${buildDir}\libs into ${tomcatHome}/webapps"
copy{
from "${buildDir}\libs"
into "${tomcatHome}/webapps"
include '*.war'
}
}
Des idées sur ce qu'il faut faire ensuite?
8 réponses
Alternativement, vous pourriez être en mesure de tirer parti du gradle-tomcat-plugin
La tâche de guerre est consciente des artefacts qu'elle génère.
task deployToTomcat(type: Copy) {
from war.archivePath
into "${tomcatHome}/webapps"
}
Vous pouvez bien sûr utiliser le plugin tomcat. Ma configuration m'empêche d'utiliser/modifier l'option war & tomcat prête à l'emploi.
Personnellement, j'aime la saveur suivante (copiée de ma construction.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
}
}
-- vous appelez les différentes options que vous incluez dans la tâche' tom ' à partir de la ligne de commande --
$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart
Cela pourrait potentiellement se développer davantage, car j'ajoute plus de commandes / options liées à Tomcat. Quelques pointeurs:
- déplacer l'emplacement etc. à gradle.propriété pour que cela puisse fonctionner dans différents environnements.
- interrogez votre port de serveur tomcat pour affiner les options et les messages.
- déplacer vers le code de plugin / tâche qui pourrait être réutilisé.
Cette version limitée fonctionne pour moi en ce moment: -)
J'ai accompli ceci avec:
task deploy (dependsOn: war){
copy {
from "build/libs"
into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
include "*.war"
}
}
L'exécuter comme ceci:
gradle deploy
Vous pouvez donner un coup de feu au plugin Gradle Cargo. Il vous permet de déployer un fichier WAR vers un Tomcat local ainsi qu'un Tomcat distant.
Veuillez vous assurer que l'archive war est regroupée avant l'exécution de deploylocal
.
Peut-être, vous pourriez définir une dépendance:
task deploylocal(dependsOn: build) << {
NB il existe une propriété de convention dans le plugin java nommée libsDir
. Il vous permet de référencer le répertoire build/libs de meilleure manière:
task deploylocal(dependsOn: build) << {
println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
copy{
from libsDir
into "${tomcatHome}/webapps"
include '*.war'
}
}
Tout d'abord, essayer de déboguer. Vérifiez l'ordre d'exécution des tâches; voyez s'il est exécuté après la production du fichier war. Aussi si oui ou non il dit à jour.
Le problème pourrait être l'absence de toute dépendance entre la tâche this et la sortie que vous souhaitez copier.
Essayez de remplacer cette tâche générale par une instance D'une tâche de copie, et faites-la dépendre du fichier war que vous essayez de copier.
Quelque Chose comme ceci:
task deployLocal(type: Copy) {
dependsOn configurations.archives.buildArtifacts
from configurations.archives.allArtifacts*.file
into("$tomcatHome/webapps")
}
En fait, plus tard, a remplacé cette fonctionnalité par un plugin cargo pour gradle et exécuter le déploiement par
gradle cargoRunLocal