Я унаследовал веб-приложение Maven/Tomcat (8.5), которое локально размещено на разных машинах. Я пытаюсь заставить приложение обновляться из файла войны, который либо хранится локально (на USB-накопителе), либо более надежно загружается с AWS в Windows. В версии для Linux программное обеспечение может загрузить новый файл войны через curl с помощью manager-script
, выполнив следующие действия:
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
, и tomcat автоматически развертывает новый военный файл после перезапуска tomcat или хост-компьютера. Проблема в том, что скопированный военный файл имеет размер 0 КБ, и развертывать нечего. Похоже, это происходит за пределами моей функции установки, потому что размер файла после FileUtils.copyFile()
для /webapps/foo.war
является правильным размером.
Я попытался реализовать запрос PUT для рулона manager-script
, прочитав документы менеджера Tomcat и другой пост:
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);
}
Однако процесс по-прежнему заканчивается военным файлом размером 0 КБ для /webapps
. Единственная ошибка в моем журнале — когда tomcat пытается развернуть пустую войну. Я попытался ослабить права на чтение/запись файлов в моей установке tomcat, и это, похоже, не помогает. Я также не знаю, могу ли я гарантировать, что все установки Windows будут иметь доступ к curl, если я попробую эту реализацию. Кто-нибудь сталкивался с подобными проблемами? Спасибо за помощь!