Tomcatのリモートデプロイが2017年からずっと失敗している件

いまだにAntでTomcatのリモートデプロイをしているのですが、ここ最近のバージョンだとずっと動いていなかったようです。

Antの中身で呼ばれているクラスを実行するとエラーになります。

DeployTask deployer = new DeployTask();
deployer.setUpdate(true);
deployer.setWar("C:\\tmp\\WebApplication1.war"); // if change to setLocalWar, it works.
deployer.setUsername("tomcat");
deployer.setPassword("tomcat");
deployer.setUrl("http://localhost:8080/manager/text");
deployer.setPath("/WebApplication1");

deployer.execute();
Exception in thread "main" java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:270)
    at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:178)
    at tomcattest.TomcatTest.main(TomcatTest.java:28)
Caused by: java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1692)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:231)
    ... 2 more

機能追加で埋め込んでしまった不具合で、ワークアラウンドとしては、実行前に以下のコードを動かせばよいとの事。

ListTask list = new ListTask();
list.setUsername("tomcat");
list.setPassword("tomcat");
list.setUrl("http://localhost:8080/manager/text");
list.execute();

やったね!

影響しているバージョンは以下のものです。

  • 9.0.0.M22 - 9.0.12
  • 8.5.16 - 8.5.34
  • 8.0.45 -
  • 7.0.78 - 7.0.91

https://bz.apache.org/bugzilla/show_bug.cgi?id=62809