嵌入式jetty无法在maven程序集中发现web-fragment.xml

时间:2016-02-29 20:53:16

标签: java embedded-jetty maven-assembly-plugin web-fragment

我的应用程序在嵌入式Jetty 9.2.11上运行良好,但在使用maven程序集插件组装后,只提供在web.xml中声明的servlet。

我的jar包含使用Servlet 3.0格式的WEB-INF/web.xml 许多罐子放在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.xmlweb-fragment.xml文件都非常标准。除了servlet和安全设置,包括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)

1 个答案:

答案 0 :(得分:0)

使用Servlet 3兼容的servlet容器(Jetty 9),根本不能使用web.xml,并且在应用程序中只有Java Configuration。这是一个good starting point如何做到这一点。