Gradle: copia guerra alla directory tomcat
-
25-09-2019 - |
Domanda
Sto cercando di scrivere un compito Gradle che copia generati file di guerra alla mia istanza di Tomcat locale:
Questo non funziona e non sono sicuro di come eseguire il debug esso:
task deploylocal() << {
println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
copy{
from "${buildDir}\\libs"
into "${tomcatHome}/webapps"
include '*.war'
}
}
Tutte le idee su cosa fare dopo?
Soluzione
In alternativa, si potrebbe essere in grado di sfruttare la Gradle-tomcat-plugin
Altri suggerimenti
Il compito WAR è consapevole dei manufatti che genera.
task deployToTomcat(type: Copy) {
from war.archivePath
into "${tomcatHome}/webapps"
}
I compiuto questo con:
task deploy (dependsOn: war){
copy {
from "build/libs"
into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
include "*.war"
}
}
in esecuzione in questo modo:
gradle deploy
Si potrebbe di portate usare il plugin Tomcat. La mia configurazione mi impedisce di utilizzare / modificare l'uscita dalla guerra di dialogo e Tomcat opzione.
Personalmente, come il seguente sapore (copiato dal mio 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
}
}
- si chiama le varie opzioni di includere nel compito 'tom' dalla riga di comando -
$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart
questo potrebbe potenzialmente crescere ulteriormente, come aggiungo altri comandi / opzioni relative alla Tomcat. Alcune indicazioni:
- spostare la posizione ecc per gradle.properties in modo da poter lavorare in ambienti diversi.
- polling la porta del server Tomcat per sintonizzare opzioni e msgs.
- passaggio al codice del plugin / compito che potrebbe essere riutilizzato.
Questa versione limitata funziona per me in questo momento: -)
Si potrebbe dare il Gradle Cargo plug un colpo. Essa consente di distribuire un file WAR per un locale così come un Tomcat remoto.
Per favore, assicuri l'archivio di guerra è sempre in bundle prima dell'esecuzione deploylocal
.
Forse, è possibile definire una dipendenza:
task deploylocal(dependsOn: build) << {
NB C'è una proprietà convegno a Java Plugin chiamato libsDir
. Esso consente di costruire riferimento / librerie directory in modo migliore:
task deploylocal(dependsOn: build) << {
println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
copy{
from libsDir
into "${tomcatHome}/webapps"
include '*.war'
}
}
In primo luogo, il tentativo di eseguire il debug. Controllare l'ordine di esecuzione dell'attività; vedere se è in esecuzione dopo che il file di guerra viene prodotto. Anche se si dice UP-TO-DATE.
Il problema potrebbe essere la mancanza di eventuali dipendenze tra questo compito e l'uscita che si desidera copiare.
Provare a sostituire questo compito generale con un'istanza di un'attività di copia, e farlo dipende dal file di guerra si sta cercando di copiare.
Qualcosa di simile a questo:
task deployLocal(type: Copy) {
dependsOn configurations.archives.buildArtifacts
from configurations.archives.allArtifacts*.file
into("$tomcatHome/webapps")
}
In realtà dopo un sostituito questa funzionalità con plugin di carico per Gradle e RUNN il deploy da
gradle cargoRunLocal