gradle: скопировать войну в каталог tomcat

Я пытаюсь написать задачу Gradle, которая копирует сгенерированные военные файлы в мой локальный экземпляр tomcat:

Это не работает, и я не уверен, как это отлаживать:

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

Есть идеи, что делать дальше?


person Dave    schedule 17.11.2010    source источник


Ответы (9)


Кроме того, вы можете использовать gradle-tomcat-plugin.

person TheKaptain    schedule 06.03.2011
comment
Спасибо, я мог бы использовать это вместо этого! - person Dave; 10.03.2011

Задача WAR осведомлена о генерируемых ею артефактах.

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "${tomcatHome}/webapps"
}
person Uriah Carpenter    schedule 15.01.2011
comment
Кен комментарии что вы бы не объявляли dependsOn: 'war': тот факт, что вы копируете из war.archivePath, является неявной зависимостью. - person Rup; 10.05.2012
comment
Я бы рекомендовал использовать тип задачи Copy вместо вызова метода copy. Вызов метода не предоставляет вам проверки UP-TO-DATE. - person Benjamin Muschko; 21.08.2013
comment
У меня был war.dependsOn test, и мне пришлось добавить deployToTomcat.dependsOn war, чтобы убедиться, что мои тесты выполняются. - person Adam Johns; 15.03.2019

Я выполнил это с помощью:

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

запускаю так:

gradle deploy
person Pasha    schedule 27.04.2014
comment
Это может скопировать сразу несколько версий (если вы не часто чистите), лучше скопировать только war.archivePath, как предлагается в других ответах, чтобы скопировать только последнюю версию. - person lapo; 06.12.2018

Конечно, вы можете использовать плагин 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. Несколько указателей:

  1. переместите местоположение и т. д. в gradle.properties, чтобы он мог работать в разных средах.
  2. опросите порт вашего сервера tomcat, чтобы точно настроить параметры и сообщения.
  3. перейти к коду плагина/задачи, который можно использовать повторно.

эта ограниченная версия работает для меня прямо сейчас :-)

person neeraj    schedule 20.12.2011

Вы можете попробовать плагин Gradle Cargo. Он позволяет развертывать файл WAR как на локальном, так и на удаленном Tomcat.

person Benjamin Muschko    schedule 15.06.2011

Если у вас уже есть плагин war, вы также можете просто добавить

war.doLast {
    copy {
        from war.archiveFile
        into "${tomcatHome}/webapps"
    }
}

Затем вы всегда будете автоматически развертывать каждый раз, когда создаете файл войны.

person patriques    schedule 24.07.2020

Пожалуйста, убедитесь, что военный архив собран до выполнения 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'
    }
  }
person Nikita Skvortsov    schedule 18.11.2010

Во-первых, попытка отладки. Проверить порядок выполнения задачи; посмотрите, запускается ли он после создания файла войны. Также независимо от того, написано ли это UP-TO-DATE.

Проблема может заключаться в отсутствии каких-либо зависимостей между этой задачей и выводом, который вы хотите скопировать.

Попробуйте заменить эту общую задачу экземпляром задачи копирования и сделать ее зависимой от военного файла, который вы пытаетесь скопировать.

Что-то вроде этого:

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

На самом деле позже мы заменили эту функциональность грузовым плагином для gradle и запустили развертывание с помощью

gradle cargoRunLocal
person Pasha    schedule 04.05.2014