gradle: copier la guerre dans le répertoire tomcat
-
25-09-2019 - |
Question
Je suis en train d'écrire une tâche Gradle qui copie les fichiers de guerre à mon exemple tomcat locale:
Ce ne fonctionne pas et je ne suis pas sûr de savoir comment le déboguer:
task deploylocal() << {
println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
copy{
from "${buildDir}\\libs"
into "${tomcatHome}/webapps"
include '*.war'
}
}
Toutes les idées sur ce qu'il faut faire?
La solution
Vous pourriez être en mesure de tirer parti de la gradle-tomcat-plugin
Autres conseils
La tâche de WAR est conscient des artefacts qu'elle génère.
task deployToTomcat(type: Copy) {
from war.archivePath
into "${tomcatHome}/webapps"
}
J'accompli cela avec:
task deploy (dependsOn: war){
copy {
from "build/libs"
into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
include "*.war"
}
}
fonctionner comme ceci:
gradle deploy
Vous pouvez bien sûr utiliser-le plugin tomcat. Ma configuration me empêche d'utiliser / modifier la de la guerre boîte et l'option tomcat.
Personnellement, je aime la saveur suivante (recopié de mon 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
}
}
- que vous appelez les différentes options que vous incluez dans la tâche « tom » de la ligne de commande -
$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart
cela pourrait pousser plus loin, comme j'ajouter des commandes / options liées à Tomcat. Quelques conseils:
- déplacer l'emplacement etc. à gradle.properties afin qu'il puisse travailler dans des environnements différents.
- interroger votre port tomcat pour affiner options et msgs.
- move au code plugin / tâche qui pourrait être réutilisé.
cette version limitée fonctionne pour moi maintenant: -)
Vous pouvez donner le Gradle plug-in Cargo un coup de feu. Il vous permet de déployer un fichier WAR local ainsi qu'un Tomcat distant.
S'il vous plaît, assurez-vous que l'archive de guerre s'empaqueté avant deploylocal
est exécuté.
Peut-être, vous pouvez définir une dépendance:
task deploylocal(dependsOn: build) << {
NB Il est une propriété de convention dans le plugin java nommé libsDir
. Il vous permet de référencer le répertoire build / libs de meilleure façon:
task deploylocal(dependsOn: build) << {
println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
copy{
from libsDir
into "${tomcatHome}/webapps"
include '*.war'
}
}
Tout d'abord, en essayant de débogage. Vérifiez l'ordre d'exécution des tâches; voir si son exécution après que le fichier de guerre est produit. En outre si oui ou non il est dit UP-TO-DATE.
Le problème pourrait être l'absence de dépendances entre la tâche et la sortie que vous souhaitez copier.
Essayez de remplacer cette tâche générale avec une instance d'une tâche de copie, et de le rendre dépendant du fichier de guerre 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 remplacé cette fonctionnalité avec le plugin cargo pour gradle et RUNN Deploy par
gradle cargoRunLocal