在过去10年左右的时间里,我有机会无数次地将Web应用程序部署到tomcat中。我还写了几个脚本试图自动完成,但从来没有 设法完全自动化。
这是问题所在。我正在尝试部署一个新的战争,与我的tomcat的webapps中的现有战争同名。
选项1:天真的方法 - 只需复制战争并等待它更新爆炸目录。这有时是有效的。很多时候 - 爆炸目录在合理的时间内没有更新
选项2:直通方法 - 停止tomcat,删除所有战争和临时文件。复制战争并启动tomcat。这通常涉及停止tomcat,等待一段时间 - 然后检查进程是否仍然存在并将其杀死。
选项3:手动方法 - 这可能是令人惊讶的,但我发现它可以工作很多次 - 复制战争,等待爆炸目录更新,一旦它 -
重启tomcat。如果没有 - 您可以尝试删除临时工作文件,这有时会有所帮助。
我也尝试了很多选项 - 使用不同的顺序和动作的子集 - 重启,停止,删除战争,删除爆炸,删除localhost上下文,删除localhost工作目录,复制战争,睡眠,比较日期,礼貌地询问tomcat重装等等。似乎没什么可行的。
这可能是我做错了,但我听过很多人的同样经历,所以我来这里得到一些建议 - 你怎么说?将新战争部署到tomcat的最佳方法是什么?
谢谢!
答案 0 :(得分:11)
您可以使用curl
在shell脚本中轻松自动执行此操作on tomcat 6:
curl --upload-file deployme.war "http://tomcat:s3cret@localhost:8088/manager/deploy?path=/deployme&update=true"
on tomcat 7
curl -T "deployme.war" "http://tomcat:s3cret@localhost:8080/manager/text/deploy?path=/deployme&update=true"
或通过几乎任何porgramming语言。我发布了一个基于java的解决方案here
答案 1 :(得分:9)
我倾向于使用选项2.如果有一个项目我在ide中工作,特别是附加了调试器,我发现事情最终开始搞砸了。可能会追逐一只红鲱鱼一小时才能发现清除所有东西会让问题消失。然后很高兴有一个脚本,我可以偶尔启动以清除所有内容:
通常事情很好地关闭。如果没有,那么通常会有一个后台线程启动但缺少一个关闭钩子(比如一个memecached客户端)并且需要被追捕。通常情况下,刚刚参加新战争似乎有效。但是如果在开发环境中,执行完全重启的脚本很不错。
答案 2 :(得分:4)
货物 - http://cargo.codehaus.org/ - 可用于将WAR文件远程部署到包含Tomcat的多个Web容器中。
有关Java中的示例,请参阅http://cargo.codehaus.org/Quick+start。还提供Ant和Maven支持。
答案 3 :(得分:2)
我将WAR上传到我的主目录,cd到/ usr / local / tomcat,然后运行以下命令:
bin/shutdown.sh
rm webapps/ROOT.war
rm -rf webapps/ROOT
cp ~/ROOT.war webapps
bin/startup.sh
很容易实现自动化,但到目前为止,我一直懒得(或者不够懒惰)。
答案 4 :(得分:0)
我只是使用Tomcat管理工具来停止进程,删除它并安装新的WAR。容易腻。
答案 5 :(得分:0)
请参阅“使用客户端部署程序包部署”一节
它基本上是一个现成的ant脚本来执行常见的tomcat部署操作。
http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html#Deploying_on_a_running_Tomcat_server