Я использую Jetty 8.1.9 в качестве API и вручную развертываю, добавляя обработчик WebAppContext на сервер.Загрузка войны в встроенный Jetty с setExtractWar (false) throws IllegalArgumentException
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();
Если webapp не содержит банок в 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 не загружать библиотеки непосредственно из войны?
Edit:
Чтобы предоставить немного больше информации о моей установке, Jetty встроен внутри баночке с основным классом, который все настройки, аналогично start.jar. Это должно быть упрощение (фасад, если хотите) стандартного развертывания причала. Будут использоваться только конкретные военные пакеты, но поскольку они потенциально необязательны, они являются внешними для исполняемого банку. Таким образом, структура каталогов выглядит примерно следующее:
/ baseDirectory
| embedded-jetty.jar
/webapps
| myWar1.war
| myWar2.war
Прежде чем я опубликую и отвечу, я хотел убедиться, что вы пытаетесь поставить пристань внутри самой войны и начать все с чего-то вроде java -jar foo.war? Если это не так, объясните немного больше ваших настроек в этом отношении. –
Не совсем. Обновлен мой вопрос, чтобы уточнить. – Shaun
Итак, у вас есть войны внутри банки? если это так, просто распакуйте эти военные файлы как/webapps/myWar1 и/webapps/myWar2 внутри вашего baseDirectory.jar. –