2016-02-29 8 views
0

Мое приложение отлично работает на встроенном Jetty 9.2.11, но после сборки с плагином сборки maven обслуживаются только сервлеты, объявленные в web.xml.Встраиваемый причал не обнаруживает web-fragment.xml в сборке maven

Моя баночка содержит WEB-INF/web.xml, используя формат Servlet 3.0 ряд банок помещают в WEB-INF/lib, каждый с META-INF/web-fragment.xml. Они отлично обнаруживаются при запуске NetBeans.

QueuedThreadPool pool = new QueuedThreadPool(20); 
Server server = new Server(pool); 
server.setStopAtShutdown(true); 
ServerConnector connector = new ServerConnector(server); 
connector.setPort(8888); 
server.addConnector(connector); 
pool.start(); 
connector.start(); 

WebAppContext webapp = new WebAppContext(); 
webapp.setContextPath("/"); 
webapp.setDescriptor("WEB-INF/web.xml"); 
webapp.setDefaultsDescriptor("webdefault.xml"); 
webapp.setClassLoader(MyURIClassLoader); 
webapp.setExtractWAR(false); 
webapp.setCopyWebDir(false); 
webapp.setConfigurationDiscovered(true); 

List<String> configs = new ArrayList<>(5); 
configs.add("org.eclipse.jetty.webapp.WebInfConfiguration"); 
configs.add("org.eclipse.jetty.webapp.WebXmlConfiguration"); 
configs.add("org.eclipse.jetty.webapp.MetaInfConfiguration"); 
configs.add("org.eclipse.jetty.webapp.FragmentConfiguration"); 
configs.add("org.eclipse.jetty.webapp.JettyWebXmlConfiguration"); 
webapp.setConfigurationClasses(configs); 

ContextHandlerCollection container = new ContextHandlerCollection(); 
container.setHandlers(handlers.toArray(new Handler[handlers.size()])); 
server.setHandler(new HTTPGlobalHandler(container)); 
server.start(); 

Все web.xml и web-fragment.xml файлы довольно стандартный. Ничего, кроме сервлетов и настроек безопасности, включая CORS.

Структура сборки выглядит следующим образом:

/boot.jar (our in-house launcher with a custom URIClassLoader) 
    |- /modules/ (a folder including our target jar with ALL dependencies provided) 
    |- target.jar (containing the WEB-INF/lib folder with fragment-holding jars) 
+0

Что такое базовый ресурс «WebAppContext» в этой ситуации? –

+0

Joakim Erdfelt Я установил базовый ресурс (извините, здесь он был опущен) в качестве URL-адреса, где находится WEB-INF/web.xml. Я использую URLClassLoader, чтобы найти URL этого файла и удалить конечную часть, оставив строку, заканчивающуюся косой чертой. –

ответ

0

Having Servlet 3 совместимый контейнер сервлетов (Jetty 9) вы можете сделать не пользователь web.xml на все и только конфигурации Java в вашем приложении. Вот как это сделать: good starting point.

+0

Спасибо. Я это понимаю. Тем не менее, проект восходит к pre 3.0 дням и более старой версии Jetty, поэтому у меня есть много кода, который нужно будет пересмотреть. Другое дело, что я не нашел способ объявить настройки CORS в аннотациях. Я мог бы попробовать, но это поможет? Если веб-фрагменты не сканируются, почему аннотации могут быть разными? –