Pregunta

Estoy tratando de escribir una tarea Gradle que copia los archivos generados de guerra a mi instancia de Tomcat locales:

Esto no está funcionando y no estoy seguro de cómo depurar que:

 task deploylocal() << {
    println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
    copy{
      from "${buildDir}\\libs"
      into "${tomcatHome}/webapps"
      include '*.war'
    }
  }

¿Alguna idea sobre qué hacer a continuación?

¿Fue útil?

Solución

Como alternativa, podría ser capaz de aprovechar la Gradle-tomcat-plugin

Otros consejos

La tarea WAR es consciente de los artefactos que genera.

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "${tomcatHome}/webapps"
}

I logra esto con:

task deploy (dependsOn: war){
    copy {
        from "build/libs"
        into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
        include "*.war"
    }
}

ejecutarlo así:

gradle deploy

Se podría, por supuesto, utilizar el plugin Tomcat. Mi configuración no me permite usar / modificar el margen de la guerra cuadro y Tomcat opción.

Yo personalmente como el siguiente sabor (copiada de mi 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
    }
}

- se llama a las distintas opciones se incluyen en la tarea 'Tom' desde la línea de comandos -

$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart

esto podría crecer aún más, como agrego más comandos / opciones relacionadas con Tomcat. Algunos indicadores:

  1. mover la ubicación, etc. gradle.properties a fin de que pueda trabajar en diferentes ambientes.
  2. sondee su puerto del servidor Tomcat para afinar Opciones y Mensajes.
  3. mover al código del plugin / tarea que podría ser reutilizado.

Esta versión limitada que funciona para mí en este momento: -)

Gradle carretera complemento un tiro. Se le permite desplegar un archivo WAR en un local, así como Tomcat remoto.

Por favor, asegúrese de que el archivo de la guerra se está liado antes de ejecutar deploylocal. Tal vez, se podría definir una dependencia:

task deploylocal(dependsOn: build) << {

Nota: Hay una propiedad convención en plugin de Java libsDir llamado. Se le permite a la acumulación de referencia / libs directorio de una mejor manera:

 task deploylocal(dependsOn: build) << {
    println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
    copy{
      from libsDir
      into "${tomcatHome}/webapps"
      include '*.war'
    }
  }

En primer lugar, tratar de depuración. Comprobar el orden de ejecución de la tarea; ver si se está ejecutando después de que se produjo el archivo de la guerra. También si es o no dice ARRIBA AL DÍA.

El problema podría ser la falta de cualquier dependencia entre la tarea y la salida que desea copiar.

Trate de sustituir esta tarea general con una instancia de una tarea de copia, y hacer que depende del archivo de la guerra que está tratando de copiar.

Algo como esto:

task deployLocal(type: Copy) { 
    dependsOn configurations.archives.buildArtifacts
    from configurations.archives.allArtifacts*.file 
    into("$tomcatHome/webapps") 
}

En realidad, más tarde, un reemplazados con esta funcionalidad plug-in de carga para Gradle y RUNN el despliegue por

gradle cargoRunLocal
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top