Подтвердить что ты не робот

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

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

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

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

Любые идеи о том, что делать дальше?

4b9b3361

Ответ 1

В качестве альтернативы вы можете использовать gradle-tomcat-plugin

Ответ 2

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

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "${tomcatHome}/webapps"
}

Ответ 3

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

  • переместите местоположение и т.д. в gradle.properties, чтобы он мог работать в разных средах.
  • Опросите ваш порт сервера tomcat для точной настройки параметры и msgs.
  • перейдите в код плагина/задачи, который можно использовать повторно.

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

Ответ 4

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

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

работает следующим образом:

gradle deploy

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

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

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

Ответ 8

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

gradle cargoRunLocal