我正在尝试编写一个Gradle任务,它将生成的war文件复制到我的本地tomcat实例:
这不起作用,我不知道如何调试它:
task deploylocal() << {
println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
copy{
from "${buildDir}\\libs"
into "${tomcatHome}/webapps"
include '*.war'
}
}
关于下一步该怎么做的任何想法?
答案 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相关的命令/选项。几点指示:
这个限量版现在适用于我: - )
答案 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