【发布时间】:2016-11-14 09:14:35
【问题描述】:
在测试环境中,我尝试使用一些应用程序运行嵌入式码头。该应用程序依赖于some-dependency,它在META-INF 文件夹中指定了一个web-fragemnt.xml。我正在尝试像这样加载片段:
public static void someMain(...) {
server = new Server(port);
final WebAppContext context = new WebAppContext();
addFragmentIfExists(context);
context.setContextPath("/");
context.setParentLoaderPriority(true);
context.setResourceBase(pathToWebapp);
server.setHandler(context);
}
private void addFragmentIfExists(final WebAppContext context) {
final Optional<URL> url = Stream.of(((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs())
.filter(u -> u.toString().contains("some-dependency")).findFirst();
url.ifPresent(u -> {
try {
context.getMetaData().addFragment(newResource(u),
newResource(new File(u.getPath(), "META-INF/web-fragment.xml")));
} catch (Exception e) {
...
}
});
}
调试时,我可以看到片段在server.handler.metadata.webFragments{Roots,NameMap,ResourceMap} 下加载,但在server.handler.{filters,servlets} 下我看不到该片段中声明的过滤器和servlet
我究竟做错了什么?
另外,是否有一种不那么笨拙的方式来加载片段?我在类路径中也有一个弹簧网络片段,所以如果我只是尝试从类路径加载它会加载弹簧一个
【问题讨论】:
标签: java jetty embedded-jetty