Ответ 1
В качестве альтернативы вы можете использовать gradle-tomcat-plugin
Я пытаюсь написать задачу Gradle, которая копирует созданные военные файлы в мой локальный экземпляр tomcat:
Это не работает, и я не уверен, как его отладить:
task deploylocal() << {
println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
copy{
from "${buildDir}\\libs"
into "${tomcatHome}/webapps"
include '*.war'
}
}
Любые идеи о том, что делать дальше?
В качестве альтернативы вы можете использовать gradle-tomcat-plugin
Задача WAR знает об артефактах, которые она генерирует.
task deployToTomcat(type: Copy) {
from war.archivePath
into "${tomcatHome}/webapps"
}
Вы можете, конечно, использовать плагин tomcat. Моя установка запрещает мне использовать/изменять параметр war и tomcat из коробки.
Мне лично нравится следующий аромат (скопированный из моего 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
}
}
- вы вызываете различные параметры, которые вы включаете в задачу "tom" из командной строки -
$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart
это может потенциально увеличиться, поскольку я добавляю больше команд/опций, связанных с Tomcat. Несколько указателей:
эта ограниченная версия работает для меня прямо сейчас: -)
Я выполнил это с помощью:
task deploy (dependsOn: war){
copy {
from "build/libs"
into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
include "*.war"
}
}
работает следующим образом:
gradle deploy
Вы можете дать Gradle Cargo plugin выстрел. Он позволяет развернуть WAR файл как локальному, так и удаленному Tomcat.
Пожалуйста, убедитесь, что архив войны попадает в комплекте до выполнения deploylocal
.
Возможно, вы можете определить зависимость:
task deploylocal(dependsOn: build) << {
NB Существует свойство конвенции в java-плагине с именем libsDir
. Это позволяет более эффективно ссылаться на каталог build/libs:
task deploylocal(dependsOn: build) << {
println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
copy{
from libsDir
into "${tomcatHome}/webapps"
include '*.war'
}
}
Во-первых, попытка отладки. Проверьте порядок выполнения задачи; посмотрите, будет ли он запущен после создания файла войны. Также, говорит ли он UP-TO-DATE.
Проблема может заключаться в отсутствии каких-либо зависимостей между этой задачей и выходом, который вы хотите скопировать.
Попробуйте заменить эту общую задачу экземпляром задачи Копировать и сделать ее зависимой от файла войны, который вы пытаетесь скопировать.
Что-то вроде этого:
task deployLocal(type: Copy) {
dependsOn configurations.archives.buildArtifacts
from configurations.archives.allArtifacts*.file
into("$tomcatHome/webapps")
}
На самом деле позже, заменив эту функциональность платным плагином для gradle и запустив развертывание
gradle cargoRunLocal