【发布时间】:2020-04-07 21:49:39
【问题描述】:
我继承了一个本地托管在不同机器上的 Maven/Tomcat(8.5) Web 应用程序。我试图让应用程序从本地存储(在 USB 驱动器上)或从 Windows 上的 AWS 下载的战争文件更可靠地更新。在 Linux 版本上,该软件可以通过 curl 使用 manager-script 上传新的 war 文件,具体操作如下:
String url = "http://admin:secret@localhost:8080/manager/text/deploy?path=/foo&update=true";
CommandRunner.executeCommand(new String[] { "curl", "--upload-file", war, url });
对于 Windows,当前方法尝试复制 /webapps 目录中的 war 文件,并在重启 tomcat 或主机后让 tomcat 自动部署新的 war 文件。问题是复制的战争文件最终是 0kb 并且没有什么可部署的。这似乎发生在我的安装功能之外,因为/webapps/foo.war 的FileUtils.copyFile() 之后的文件大小是正确的大小。
我已尝试通过阅读 Tomcat 管理器文档和另一篇文章来实现对 manager-script 卷的 PUT 请求:
File warfile = new File(request.getWar());
String warpath = warfile.getAbsolutePath().replace("\\", "/");
//closes other threads
App.terminate();
String url = "http://admin:secret@localhost:8080/manager/text/deploy?path=/foo&war=file:" + warpath + "&update=true";
HttpClient client = HttpClientBuilder.create().build();
HttpPut request;
try {
request = new HttpPut(url);
HttpResponse response = client.execute(request);
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
System.err.println(result.toString());
} catch (Exception e){
LOGGER.info("war install failed");
throw new ServiceException("Unable to upload war file.", e);
}
然而,这个过程仍然以一个 0kb 的战争文件结束/webapps。我的日志中唯一的错误是当 tomcat 尝试部署空战时。我曾尝试在我的 tomcat 安装中放宽文件读/写权限,但似乎没有帮助。我也不知道如果我尝试该实现,是否可以保证所有 Windows 安装都可以访问 curl。有没有人遇到过类似的问题?感谢您的帮助!
【问题讨论】:
-
更新:所以我无法让它工作。我还没有弄清楚我无法复制的 curl 做什么。我能够深入研究公司记录并确定我安装的所有 Windows 机器都超过了 1803 版,其中 curl 在 Windows 中是标准配置。我使用 Java Runtime 来执行上面的 curl 命令。因此,如果有人在这里绊倒,我建议先尝试一下。
标签: windows maven deployment war tomcat8.5