题
我正在尝试编写一个 Gradle 任务,将生成的 war 文件复制到我的本地 tomcat 实例:
这不起作用,我不知道如何调试它:
task deploylocal() << {
println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
copy{
from "${buildDir}\\libs"
into "${tomcatHome}/webapps"
include '*.war'
}
}
关于下一步该做什么有什么想法吗?
解决方案
另外,你可能能够充分利用 gradle这个-Tomcat的插件
其他提示
在WAR任务是知道它产生的伪影的。
task deployToTomcat(type: Copy) {
from war.archivePath
into "${tomcatHome}/webapps"
}
我完成这个以:
task deploy (dependsOn: war){
copy {
from "build/libs"
into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
include "*.war"
}
}
运行它是这样的:
gradle deploy
您当然可以使用 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服务器端口调整为微调选项和味精。
- 移动到可以重用的插件/任务代码。
这个有限版本现在对我有用:-)
您可以给摇篮货物插件的一个镜头。它可以让你部署一个WAR文件到本地和远程的Tomcat。
请,执行deploylocal
之前,请确保战争归档越来越捆绑在一起。
也许,你可以定义一个依赖性:
task deploylocal(dependsOn: build) << {
NB有在Java插件名为libsDir
公约属性。它可以让你参考编译/中更好地库目录:
task deploylocal(dependsOn: build) << {
println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
copy{
from libsDir
into "${tomcatHome}/webapps"
include '*.war'
}
}
首先,试图调试。检查任务执行的顺序;看看war文件生成后,它正在运行。也不论它是否表示UP-TO-DATE。
这个问题可能是缺少这项工作,要复制输出之间的依赖关系的。
尝试与副本任务的情况下更换这个总任务,并使其依赖于你试图复制战争文件。
像这样:
task deployLocal(type: Copy) {
dependsOn configurations.archives.buildArtifacts
from configurations.archives.allArtifacts*.file
into("$tomcatHome/webapps")
}
实际上后一个替换货物插件gradle这个这个功能,并通过银行经营部署
gradle cargoRunLocal
不隶属于 StackOverflow