将战争部署到tomcat

时间:2012-03-31 00:00:21

标签: java tomcat deployment

在过去10年左右的时间里,我有机会无数次地将Web应用程序部署到tomcat中。我还写了几个脚本试图自动完成,但从来没有 设法完全自动化。

这是问题所在。我正在尝试部署一个新的战争,与我的tomcat的webapps中的现有战争同名。

选项1:天真的方法 - 只需复制战争并等待它更新爆炸目录。这有时是有效的。很多时候 - 爆炸目录在合理的时间内没有更新 选项2:直通方法 - 停止tomcat,删除所有战争和临时文件。复制战争并启动tomcat。这通常涉及停止tomcat,等待一段时间 - 然后检查进程是否仍然存在并将其杀死。
选项3:手动方法 - 这可能是令人惊讶的,但我发现它可以工作很多次 - 复制战争,等待爆炸目录更新,一旦它 - 重启tomcat。如果没有 - 您可以尝试删除临时工作文件,这有时会有所帮助。

我也尝试了很多选项 - 使用不同的顺序和动作的子集 - 重启,停止,删除战争,删除爆炸,删除localhost上下文,删除localhost工作目录,复制战争,睡眠,比较日期,礼貌地询问tomcat重装等等。似乎没什么可行的。

这可能是我做错了,但我听过很多人的同样经历,所以我来这里得到一些建议 - 你怎么说?将新战争部署到tomcat的最佳方法是什么?

谢谢!

6 个答案:

答案 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中工作,特别是附加了调试器,我发现事情最终开始搞砸了。可能会追逐一只红鲱鱼一小时才能发现清除所有东西会让问题消失。然后很高兴有一个脚本,我可以偶尔启动以清除所有内容:

  • 关机时间为60秒超时
  • 清除日志,临时,工作目录
  • 清除webapp文件夹
  • 从构建位置复制新的war文件
  • 爆炸新战争文件
  • 如有必要,运行一个awk脚本来自定义属性文件中的机器特定值(因此之前的爆​​炸)
  • 使用CATALINA_PID环境变量设置启动(以启用关闭力)

通常事情很好地关闭。如果没有,那么通常会有一个后台线程启动但缺少一个关闭钩子(比如一个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