gradle:将war复制到tomcat目录

时间:2010-11-17 22:31:45

标签: gradle

我正在尝试编写一个Gradle任务,它将生成的war文件复制到我的本地tomcat实例:

这不起作用,我不知道如何调试它:

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

关于下一步该怎么做的任何想法?

9 个答案:

答案 0 :(得分:49)

WAR任务知道它生成的工件。

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

答案 1 :(得分:13)

我完成了这个:

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

像这样运行:

gradle deploy

答案 2 :(得分:12)

你当然可以使用tomcat插件。我的设置阻止我使用/修改开箱即用的战争&amp; 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. 转到可以重复使用的插件/任务代码。
  4. 这个限量版现在适用于我: - )

答案 3 :(得分:7)

或者,您可以利用gradle-tomcat-plugin

答案 4 :(得分:7)

你可以给Gradle Cargo plugin一个镜头。它允许您将WAR文件部署到本地以及远程Tomcat。

答案 5 :(得分:1)

如果您已经拥有war插件,也可以直接添加

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

然后,每次构建war文件时,您将始终自动部署。

答案 6 :(得分:0)

请确保在deploylocal执行之前捆绑了war存档。 也许,你可以定义一个依赖:

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 :(得分:0)

首先,尝试调试。检查任务执行的顺序;看看是否在生成war文件后运行它。此外,它是否说明了UP-TO-DATE。

问题可能是此任务与您要复制的输出之间缺少任何依赖关系。

尝试使用复制任务的实例替换此常规任务,并使其依赖于您尝试复制的war文件。

这样的事情:

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

答案 8 :(得分:0)

实际上后来用gradle的货物插件取代了这个功能,并通过

运行部署
gradle cargoRunLocal