The manager webapp doPut() processing (which is what the Ant manager tasks use), extracts a war file from the HTTP request, saves it to appBase, and then tries to copy the war on to itself, resulting in a zero-length war file. The code that does this is in org.apache.catalina.manager.ManagerServlet line 642 in method deploy(PrintWriter, String, String, boolean, HttpServletRequest): if (!isServiced(path)) { addServiced(path); ---> copy(localWar, new File(getAppBase(), basename + ".war")); check(path); removeServiced(path); } In the call to copy(), the source and destination files are the same.
That's possible, I didn't test uploading with the Ant task. If it works like that, it should be modified to do the upload somewhere else (and when it's done, copy to the final location).
This issue is now fixed. Sorry for the trouble.