Грейд: Скопируйте войну в каталог Tomcat
-
25-09-2019 - |
Вопрос
Я пытаюсь написать задачу Ricely, которые копируют файлы войны в мой локальный экземпляр Tomcat:
Это не работает, и я не уверен, как отлаживать это:
task deploylocal() << {
println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
copy{
from "${buildDir}\\libs"
into "${tomcatHome}/webapps"
include '*.war'
}
}
Любые идеи о том, что делать дальше?
Решение
В качестве альтернативы вы можете использовать Градл-Томкат-Плагин
Другие советы
Задача войны знает о артефактах, которые он генерирует.
task deployToTomcat(type: Copy) {
from war.archivePath
into "${tomcatHome}/webapps"
}
Я достиг этого с:
task deploy (dependsOn: war){
copy {
from "build/libs"
into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
include "*.war"
}
}
Бежать так:
gradle deploy
Вы можете курс использовать плагин Tomcat. Моя установка предотвращает меня использовать / изменить выброс из варианта War 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. Несколько указателей:
- Переместите местоположение и т. Д. Для Gradle.properties, чтобы он мог работать в разных средах.
- Опрос ваш порт Tomcat Server в тонкую настройку параметров и MSG.
- Переместите к плагину / коду задач, который можно использовать повторно.
Эта ограниченная версия работает для меня прямо сейчас :-)
Вы могли бы дать Грагский плагин Грейл выстрел. Он позволяет развертывать файл 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'
}
}
Во-первых, пытаясь отладить. Проверьте порядок выполнения задач; Посмотрите, будет ли это запустить после того, как файл War производится. Кроме того, говорит ли он или нет в актуальном состоянии.
Проблема может быть отсутствие каких-либо зависимостей между этой задачей и выходом, которую вы хотите скопировать.
Попробуйте заменить эту общую задачу с экземпляром задачи копирования и сделать его в зависимости от файла войны, который вы пытаетесь скопировать.
Что-то вроде этого:
task deployLocal(type: Copy) {
dependsOn configurations.archives.buildArtifacts
from configurations.archives.allArtifacts*.file
into("$tomcatHome/webapps")
}
На самом деле позже заменил эту функциональность с помощью грузового плагина для Gradle и разверните развертывание
gradle cargoRunLocal