首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat应用程序的频繁更新

问Tomcat应用程序的频繁更新
EN

Stack Overflow用户
提问于 2012-03-18 15:33:07
回答 3查看 590关注 0票数 0

我有一个运行在Windows机器上的Tomcat 7服务器上的应用程序。在目前阶段,我必须经常更新和修复它。每当我需要更新应用程序时,我都会这样做:

  1. 在我的Linux开发计算机上构建一个新的war文件(使用ant);
  2. 转到Windows服务器,停止Tomcat服务;
  3. 把文件从我的电脑下载到Windows电脑,放在网络应用程序下;
  4. 删除webapp下的旧应用程序文件夹;
  5. 删除work/Catalina/localhost下的旧应用程序文件夹(否则它将缓存旧版本)。
  6. 重新启动Tomcat服务。

我相信有一种方法可以自动完成这一切。那是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-18 20:35:08

使用kwatee敏捷部署 (我是开发人员),您可以在一分钟内将jew应用程序的自动部署配置为tomcat (参见教程)。然后,您可以通过简单的web界面按需触发部署,或者自动使用kwatee ant任务或kwatee maven插件。哦,它也是免费的。

票数 2
EN

Stack Overflow用户

发布于 2012-03-18 17:54:18

摘要:我会花一些时间来建立一个构建和部署方案。这是一些前期的工作,但一个通用的解决方案,可以根据需要后,它的设置。

您可以使用Ant脚本完成步骤1。首先要安装Ant,然后编写一个简短的build.xml来包含类似于这个例子的内容。正确安装Ant后,您只需切换到build.xml所在的目录并运行'ant‘。

对于步骤2到6,由于您需要清理目标、管理服务等,所以我将考虑生成MSI安装程序或可执行文件。我对MSI工具的第一选择是高级安装程序。您将在特征列表下看到,免费软件版本允许您在安装和卸载时控制(启动、停止、安装、卸载) Windows服务。

(附带说明:我们使用高级安装程序Enterprise已经四年了。它不断改进,是一个非常高质量的产品。你不会失望的。)

您也可以通过Ant控制MSI的创建。下面是我的build.xml中的一个片段,它调用几个宏来编译和部署我维护的其中一个产品:

代码语言:javascript
复制
<target name="myproduct-installer" depends="unzip-myproductdocs">
    <build-ai-installer product.name="MyProduct" installer.path="setup/installs/MyProduct" project.file="MyProduct.aip" />
</target>
<target name="release-myproduct-installer">
    <release-AI-installer product.name="MyProduct" installer.path="setup/installs/MyProduct" product.path="${some-predefined-target}" />
</target>

下面是上面使用的宏:

代码语言:javascript
复制
<macrodef name="build-ai-installer">
    <attribute name="product.name" />
    <attribute name="installer.path" />
    <attribute name="project.file" />
    <sequential>
        <echo message="Making installer at @{installer.path}" />
        <mkdir dir="@{installer.path}/newInstall" />
        <exec dir="@{installer.path}" executable="${env.ADVANCEDINSTALLER}" failonerror="true">
            <arg line="/edit @{project.file} /SetVersion ${product.version}" />
        </exec>
        <exec dir="@{installer.path}" executable="${env.ADVANCEDINSTALLER}" failonerror="true">
            <arg line="/build @{project.file}" />
        </exec>
    </sequential>
</macrodef>

<macrodef name="release-AI-installer">
    <attribute name="product.name" />
    <attribute name="installer.path" />
    <attribute name="product.path" />
    <sequential>
        <copy todir="@{product.path}">
            <fileset dir="@{installer.path}/newInstall" />
        </copy>
    </sequential>
</macrodef>

这些宏使用名为env.ADVANCEDINSTALLER的Windows环境变量。更简单的构建设置只会设置Ant属性并删除“and”。前缀:

代码语言:javascript
复制
<property name="ADVANCEDINSTALLER" value="path-to-AdvancedInstaller.com" />

这种自动化水平一旦启动和运行,就会产生效益。但是,如果它超出了您的需要(我不会感到惊讶),这个答案可能会有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2012-03-19 07:47:49

有办法可以做到。

一种方法是使用连续集成系统,例如詹金斯。它允许您定期或在每次提交到源存储库之后构建war。

然后是Jenkins 部署插件,它可以用于在构建后将war部署到正在运行的Tomcat实例。它使用Tomcat的标准管理器webapp,因此必须安装在Tomcat中,并设置用户和密码。

请注意,频繁地重新部署到正在运行的Tomcat很不幸是一种简单的方法来发现您的way应用程序在卸载时会泄漏内存。关于Tomcat的OutOfMemory和MemoryLeakProtection文章是有用的读物。自动Tomcat重新启动可能是一个有用的权宜之计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9759559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档