【问题标题】:How do I use Ant's DeployTask to deploy a Web application to Tomcat?如何使用 Ant 的 DeployTask 将 Web 应用程序部署到 Tomcat?
【发布时间】:2011-05-04 08:26:37
【问题描述】:
$ ant deploy
Buildfile: /Users/simpatico/SOLR_HOME/build.xml

deploy:

BUILD FAILED
/Users/simpatico/SOLR_HOME/build.xml:531: java.io.IOException: Server returned HTTP response code: 403 for URL: http://localhost:8080/manager/deploy?path=%2Fsolr
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:228)

Total time: 2 seconds

在 build.xml 中:

<!--http://tomcat.apache.org/tomcat-5.5-doc/manager-howto.html#Executing_Manager_Commands_With_Ant-->
  <!-- Configure properties to access the Manager application -->
  <property name="url"      value="http://localhost:8080/manager"/>
  <property name="username" value="admin"/>
  <property name="password" value="admin"/>

  <!-- Configure the custom Ant tasks for the Manager application -->
  <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask"/>

<!-- Configure the context path for this application -->
  <property name="path"     value="solr"/>

  <target name="deploy" description="Install web application"
          >
    <deploy url="${url}" username="${username}" password="${password}"
            path="${path}" war="file:${dist}/solr.war"/>
  </target>

/solr 和 solr 路径都不起作用。

<tomcat-users>
    <role rolename="manager-gui"/>
    <user password="admin" roles="manager-gui,manager-script,admin" username="admin"/>
</tomcat-users>

编辑:现在无法部署,因为应用程序已经存在于路径 /solr

取消部署:[取消部署] OK - 取消部署 应用在上下文路径 /solr

部署:[部署]失败 - 应用程序 已经存在于路径 /solr

构建失败 /Users/simpatico/SOLR_HOME/build.xml:532: 失败 - 应用程序已存在于 路径 /solr

【问题讨论】:

  • 用户 admin/admin 是否在 tomcat-users.xml 中配置了正确的角色来访问管理界面?
  • @simpatico: 403 表示“禁止”,您确定您提供了正确的凭据吗? BTW,使用的是什么版本的Tomcat(是5.5)?
  • @barti_ddu - tomcat 7. 我已经在 q (admin/admin) 中提供了双方的凭据
  • @simpatico: 公平,对于 tc7 部署 url 看起来像 http://host:port/manager/text/deploy?path=/foo
  • 由于某种原因,所以不会显示我添加到问题中的部分,显示修改后的部署和取消部署目标

标签: tomcat rest deployment ant manager-app


【解决方案1】:

如果您查看Manager App 的文档页面,您会发现主要区别在于脚本的 url。该示例使用(注意/text 部分):

<property name="url"      value="http://localhost:8080/manager/text"/>

在 *nix 环境中,您必须检查运行服务器的用户,以及该用户是否具有更改 Web 目录下文件的正确权限。

【讨论】:

  • @vbence - 你成功了(我在看谷歌给出的 5.5)。但是现在它没有部署,因为应用程序已经部署,如 Q 编辑中所示。
  • @simpatico 只是从文档中复制粘贴 undeploy 任务。
  • @vbence - 这就是我所做的,并将部署修改为依赖于取消部署
  • @simpatico 我猜你是手动“部署”了你的应用程序(不是通过管理器应用程序)。尝试手动删除它,然后通过ant 进行初始部署。之后,您必须能够取消部署它。
  • @vbence - 不,手动取消部署.. 然后 ant deploy 它可以工作(因为没有什么可以取消部署)但是 ant deploy 再次会给出错误
【解决方案2】:
<target name="tomcatdeploy" description="Install web application"  >
    <deploy_tomcat url="${admin.url}" username="${admin.name}" password="${admin.password}" path="/${webapp}" war="file:${dropoff.warfile.dir}/${webapp}.war"/>
</target>

 <target name="check-context">
    <available file="${app.base.dir}/${webapp}.war" property="context.present"/>
</target>

<target name="undeploy" depends="check-context" if="context.present" description="Remove web application" >
   <undeploy_tomcat   url="${admin.url}" username="${admin.name}" password="${admin.password}" path="/${webapp}"/>
</target> 

首先调用“取消部署”,然后调用“tomcatdeploy”ant 任务。您必须根据需要提供 ${pamram} 值。 “取消部署”任务将检查 webapps 目录中是否存在给定的 war 文件,如果存在,它将执行实际的取消部署。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 2012-03-17
    • 2012-08-12
    • 1970-01-01
    • 2019-01-21
    • 2015-05-16
    • 2017-07-16
    • 2011-09-06
    相关资源
    最近更新 更多