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?

30
demandé sur Dave 2010-11-18 01:31:44

8 réponses

Alternativement, vous pourriez être en mesure de tirer parti du gradle-tomcat-plugin

7
répondu TheKaptain 2011-03-06 21:15:08

La tâche de guerre est consciente des artefacts qu'elle génère.

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "${tomcatHome}/webapps"
}
45
répondu Uriah Carpenter 2015-09-16 09:31:28

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:

  1. déplacer l'emplacement etc. à gradle.propriété pour que cela puisse fonctionner dans différents environnements.
  2. interrogez votre port de serveur tomcat pour affiner les options et les messages.
  3. déplacer vers le code de plugin / tâche qui pourrait être réutilisé.

Cette version limitée fonctionne pour moi en ce moment: -)

11
répondu neeraj 2011-12-20 00:52:05

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
11
répondu Pavel 2014-06-08 00:03:39

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.

6
répondu Benjamin Muschko 2011-06-15 20:44:54

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'
    }
  }
0
répondu Nikita Skvortsov 2010-11-18 12:05:14

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") 
}
0
répondu David Resnick 2010-11-20 11:28:41

En fait, plus tard, a remplacé cette fonctionnalité par un plugin cargo pour gradle et exécuter le déploiement par

gradle cargoRunLocal
0
répondu Pavel 2014-05-04 14:18:33