4

我使用 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
4

1 回答 1

4

看来您必须webapp.setCopyWebInf(true);根据jetty jira的此页面进行设置。

于 2013-03-08T14:56:47.300 回答