2013-03-05 2 views
4

Я использую 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 
+0

Прежде чем я опубликую и отвечу, я хотел убедиться, что вы пытаетесь поставить пристань внутри самой войны и начать все с чего-то вроде java -jar foo.war? Если это не так, объясните немного больше ваших настроек в этом отношении. –

+0

Не совсем. Обновлен мой вопрос, чтобы уточнить. – Shaun

+0

Итак, у вас есть войны внутри банки? если это так, просто распакуйте эти военные файлы как/webapps/myWar1 и/webapps/myWar2 внутри вашего baseDirectory.jar. –

ответ

3

Похоже, что вы должны установить webapp.setCopyWebInf(true); согласно this page от причала JIRA.

+0

Я наткнулся на это раньше. Кажется, явно не указано, что вы не можете загружать .jars непосредственно из войн или почему. Тем не менее, возможно, вы правы. – Shaun

Смежные вопросы