在Tomcat上部署war文件

18

有没有一种方法可以在Tomcat服务器上部署给定的war文件?我想做到这一点,而不使用Web界面。

6个回答

23

有几种方法可以部署Tomcat Web应用程序:

  • 像之前提到的那样,放入 $CATALINA_HOME/webapps 目录中。
  • 使用构建脚本通过管理界面(随 Tomcat 一起提供)自动部署。以下是两种方式:
    • 对于 Maven:使用 tomcat 插件。您不需要在 pom.xml 中包含它,只需执行目标 mvn tomcat:deploy,该插件已包含在 Maven 2 中。这假定了 文档 中解释的几个默认值,您可以在 pom.xml配置 行为。还有其他目标,可以让您以 exploded 形式部署等。
    • 对于 Ant:类似于以下内容:
    <property name="manager.url"   value="http://localhost:8080/manager"/>
    <property name="manager.username" value="manager"/>
    <property name="manager.password" value="foobar"/>
    <!-- 任务定义 -->
    <taskdef name="deploy"   classname="org.apache.catalina.ant.DeployTask"/>
    <taskdef name="list"     classname="org.apache.catalina.ant.ListTask"/>
    <taskdef name="reload"   classname="org.apache.catalina.ant.ReloadTask"/>
    <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
    <!-- 目标 -->
    <target name="install" depends="compile" description="将应用程序安装到servlet容器中">
        <deploy url="${manager.url}"
                username="${manager.username}"
                password="${manager.password}"
                path="${app.path}"
                localWar="file://${build.home}"/>
    </target>
    <target name="list" description="列出servlet容器中安装的应用程序">
        <list    url="${manager.url}"
                username="${manager.username}"
                password="${manager.password}"/>
    </target>
    <target name="reload" depends="compile" description="重新加载servlet容器中的应用程序">
        <reload url="${manager.url}"
                username="${manager.username}"
                password="${manager.password}"
                path="${app.path}"/>
    </target>
    <target name="remove" description="从servlet容器中删除应用程序">
        <undeploy url="${manager.url}"
                username="${manager.username}"
                password="${manager.password}"
                path="${app.path}"/>
    </target>
所有这些都需要您拥有一个Tomcat用户配置。它位于$CATALINA_BASE/conf/tomcat-users.xml,但是既然您已经知道如何使用Web界面,我假设您知道如何配置用户和密码。

你好,我有一个类似的安装目标,但是遇到了FileNotFoundException异常:http://localhost:8080/manager/deploy?path=%2Feccount&war=file%3A%2F%2FC%3A%5Ceccount%2Fout%2FWAR-exploded。虽然通过Web浏览器可以在file:///C:/eccount/out/WAR-exploded找到文件。我的Tomcat版本是7.0.37。 - prayagupa

10

只需将war文件复制到$TOMCAT_HOME /webapps/目录中。 Tomcat将通过自动解压缩war文件来部署它。 提示 - 如果您想要,可以直接对已解压的目录进行更新,这对开发很有用。


2
那么,我可以在服务器上运行rsync --delete命令来同步目录吗? - Milhous
如果我想手动部署一个已经存在的 war 文件,该怎么办?(不使用自动部署功能) - hpaknia

2
你可以编辑conf/server.xml文件,并添加一个条目,指向你的war文件所在的目录。
    <Context path="/strutsDisplayTag" 
        reloadable="true" 
        docBase="C:\work\learn\jsp\strutsDisplayTag" 
        workDir="C:\work\learn\jsp\strutsDisplayTag\work" />

否则,您可以将您的.WAR文件复制到Tomcat的webapps目录中。

2

我们从不使用网页界面,不喜欢它。我们会将war文件放入webapps和server.xml中进行编辑。如果您编辑了server.xml,则需要重新启动。但是,war文件应该会自动被识别。通常,我们会先删除已扩展的目录,以避免组件来源混淆。


那么,如果您将应用程序的新版本部署到Tomcat上,您首先需要从$TOMCAT_HOME/webapps/目录中删除应用程序的目录,对吗?Tomcat会自动删除.WAR文件吗? - craig

1
Tomcat 客户端部署包 看起来是您需要从命令行部署到远程服务器的工具。从页面上可以看到:

这是一个可以用于验证、编译、压缩为 .WAR 并将 Web 应用程序部署到生产或开发 Tomcat 服务器的软件包。需要注意的是,此功能使用 Tomcat Manager,并且目标 Tomcat 服务器应该正在运行。


1

您也可以尝试使用名为tomcat-manager的命令行脚本来管理Tomcat。它需要Python,并通过HTTP与Tomcat附带的管理应用程序进行通信。您可以在*nix shell中执行以下操作:

$ tomcat-manager --user=admin --password=newenglandclamchowder \
> http://localhost:8080/manager/ stop /myapp

并且:

$ tomcat-manager --user=admin --password=newenglandclamchowder \
> http://localhost:8080/manager deploy /myapp ~/src/myapp/myapp.war

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接