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?

Était-ce utile?

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:

  1. déplacer l'emplacement etc. à gradle.properties afin qu'il puisse travailler dans des environnements différents.
  2. interroger votre port tomcat pour affiner options et msgs.
  3. 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top