我使用 Jetty 8.1.9 作为 API 并通过向服务器添加 WebAppContext 处理程序来手动部署。
Server server = new Server();
WebAppContext webapp = new WebAppContext();
webapp.setContextPath(CONTEXT_PATH);
webapp.setWar(WEBAPP_PATH);
webapp.setExtractWAR(false);
server.setHandler(webapp);
server.start();
server.join();
如果 webapp 不包含 WEB-INF/lib 中的任何 jars,那么这工作得很好。但是,如果 webapp 包含 jars,我会收到以下异常:
java.lang.IllegalArgumentException: !file: jar:file:/F:/projects/jetty-example/webapps/app.war!/WEB-INF/lib/whatever.jar
at org.eclipse.jetty.webapp.WebAppClassLoader.addClassPath(WebAppClassLoader.java:245)
如果我设置它会起作用webapp.setCopyWebInf(true);
我做错了吗,它是一个错误,还是 Jetty 不能直接从战争中加载库?
编辑:
为了提供有关我的设置的更多信息,Jetty 嵌入在一个 jar 中,该 jar 具有一个设置所有内容的主类,类似于 start.jar。这旨在简化标准码头部署(如果您愿意,可以作为外观)。只会使用特定的war包,但由于它们可能是可选的,它们在可执行jar之外。因此,目录结构如下所示:
/ baseDirectory
| embedded-jetty.jar
/ webapps
| myWar1.war
| myWar2.war