我们在 Tomcat 8.5 上的 Eclipse 中有一个标准的(取消部署 => 部署(Ant 脚本,它工作正常:
<target name="undeploy" description="undeploy from Tomcat">
<undeploy
failonerror="no"
url="${tomcat-manager-url}"
username="${tomcat-manager-username}"
password="${tomcat-manager-password}"
path="/${project-name}"
/>
</target>
和
<target name="deploy" description="deploy to tomcat">
<echo>deploying from client</echo>
<deploy
url="${tomcat-manager-url}"
username="${tomcat-manager-username}"
password="${tomcat-manager-password}"
path="/${project-name}"
war="file:${build-directory}/${war-file-name}"
/>
</target>
这工作正常,部署成功:
undeploy:
[undeploy] OK - Undeployed application at context path /project_name
deploy:
[echo] deploying from client
[deploy] OK - Deployed application at context path /project_name
build-and-undeploy-deploy:
BUILD SUCCESSFUL
但是我们不希望在部署应用程序之前使用独立的取消部署命令(因为$CATALINA_BASE/conf/[enginename]/[hostname]/project_name.xml随后被删除(,我们希望使用参数update="true">重新部署应用程序而不是目标部署,如本文档所示。
此脚本在 Tomcat 7 上的先前版本 Eclipse 中运行正常,但现在在 Tomcat 8.5 上无法正常工作。我们收到一个奇怪的"身份验证">错误:java.net.HttpRetryException:由于服务器身份验证而无法重试,在流模式下:
<target name="deploy" description="deploy to tomcat"
<echo>deploying from client</echo>
<deploy
url="${tomcat-manager-url}"
username="${tomcat-manager-username}"
password="${tomcat-manager-password}"
path="/${project-name}"
war="file:${build-directory}/${war-file-name}"
update="true"
/>
</target>
结果:
BUILD FAILED
..build.xml:104: java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
Total time: 922 milliseconds
Eclipse Oxygen 版本中的 Ant 1.10.1;在 Tomcat 8.5.11/8.5.20 上测试;Java 版本 1.8.0_144。
我遇到了完全相同的问题,但找不到正确解决它的方法。
我为解决此问题所做的是我用localWar
替换了war
标签。它不会使用 HTTP PUT 操作部署应用程序,而是执行 GET。我的理解是,它不会通过HTTP发送WAR,而是告诉Tomcat管理器将文件从给定位置复制到webapps
文件夹中。
您的文件如下所示:
<target name="deploy" description="deploy to tomcat"
<echo>deploying from client</echo>
<deploy
url="${tomcat-manager-url}"
username="${tomcat-manager-username}"
password="${tomcat-manager-password}"
path="/${project-name}"
localWar="file:${build-directory}/${war-file-name}"
update="true"
/>
</target>
希望有帮助。
我找到了同样的东西。 这发生在 8.5.15 之后的所有版本中。8.5.15 工作正常。8.5.16 毕竟对我来说失败了。
我还没有从发行说明中弄清楚什么更改会这样做,或者为什么会发生,但我能够验证它不会在 8.5.15 中发生,而在 8.5.16 中会发生。
我正在删除 Meta-inf 中的 127.0.0.1 门,我可以很好地从 Web 浏览器登录,但是当我尝试使用 ant 任务时,它总是失败。 使用 build xml 从 8.5.15 到 8.5.16 是否有依赖项更改?
所以,你可以通过尝试一个较旧的8.5版本来解决,我认为也许我们应该打开一张反对Tomcat的票。
请检查当前tomcat 8.5的conf文件夹中的tomcat-users.xml文件中是否定义了角色。根据早期Tomcat 7的tomcat-users.xml文件对其进行验证。
它应包含如下定义:
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin,manager"/>