我的應用程序在嵌入式Jetty 9.2.11上運行良好,但是在與maven assembly插件組裝之後,只有在web.xml中聲明的Servlet才能提供服務。嵌入式jetty未能發現maven程序集中的web-fragment.xml
我的罐包含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
文件是非常標準。只有servlet和安全設置,包括CORS。
組裝的結構如下:
在這種情況下,什麼是WebAppContext基礎資源? –
Joakim Erdfelt我將WEB-INF/web.xml所在的URL設置爲基礎資源(對不起,這裏省略)。我使用URLClassLoader來查找此文件的URL並刪除結尾部分,結果以斜槓結尾。 –