Я использую Jetty 8.1.9 в качестве API и развертываю вручную, добавляя обработчик WebAppContext на сервер.
Server server = new Server();
WebAppContext webapp = new WebAppContext();
webapp.setContextPath(CONTEXT_PATH);
webapp.setWar(WEBAPP_PATH);
webapp.setExtractWAR(false);
server.setHandler(webapp);
server.start();
server.join();
Если веб-приложение не содержит jar-файлов в WEB-INF/lib, то это работает нормально. Однако, если веб-приложение содержит банки, я получаю следующее исключение:
java.lang.IllegalArgumentException: !file: jar:file:/F:/projects/jetty-example/webapps/app.war!/WEB-INF/lib/whatever.jar
at org.eclipse.jetty.webapp.WebAppClassLoader.addClassPath(WebAppClassLoader.java:245)
Это работает, если я установил webapp.setCopyWebInf(true);
Я что-то не так делаю, это баг, или Jetty не может загружать библиотеки напрямую из варов?
Редактировать:
Чтобы предоставить немного больше информации о моей настройке, Jetty встроен в банку с основным классом, который настраивает все, подобно start.jar. Это задумано как упрощение (фасад, если хотите) стандартного развертывания пристани. Будут использоваться только определенные военные пакеты, но, поскольку они потенциально необязательны, они являются внешними по отношению к исполняемому банку. Итак, структура каталогов выглядит примерно так:
/ baseDirectory
| embedded-jetty.jar
/ webapps
| myWar1.war
| myWar2.war