gradle: скопировать войну в каталог Tomcat - PullRequest
34 голосов
/ 18 ноября 2010

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

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

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

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

Ответы [ 8 ]

49 голосов
/ 15 января 2011

Задача WAR знает об артефактах, которые она генерирует.

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "${tomcatHome}/webapps"
}
13 голосов
/ 27 апреля 2014

Я сделал это с помощью:

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

, запустив его так:

gradle deploy
12 голосов
/ 20 декабря 2011

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

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

7 голосов
/ 16 июня 2011

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

7 голосов
/ 07 марта 2011

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

0 голосов
/ 04 мая 2014

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

gradle cargoRunLocal
0 голосов
/ 20 ноября 2010

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

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

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

Примерно так:

task deployLocal(type: Copy) { 
    dependsOn configurations.archives.buildArtifacts
    from configurations.archives.allArtifacts*.file 
    into("$tomcatHome/webapps") 
}
0 голосов
/ 18 ноября 2010

Пожалуйста, убедитесь, что военный архив собирается в комплекте до того, как 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'
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...