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