Мое приложение отлично работает на встроенном 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)
Что такое базовый ресурс «WebAppContext» в этой ситуации? –
Joakim Erdfelt Я установил базовый ресурс (извините, здесь он был опущен) в качестве URL-адреса, где находится WEB-INF/web.xml. Я использую URLClassLoader, чтобы найти URL этого файла и удалить конечную часть, оставив строку, заканчивающуюся косой чертой. –