使用setExtractWar(false)在嵌入式Jetty中加载war会抛出IllegalArgumentException

我使用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中不包含任何jar,那么这很好用.但是,如果webapp包含jar,我会收到以下异常:

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中,其中包含一个设置所有内容的主类,类似于start.jar.这旨在简化标准码头部署的简化(如果您愿意的话).将仅使用特定的war包,但由于它们可能是可选的,因此它们位于可执行jar的外部.因此,目录结构如下所示:

/ baseDirectory
  | embedded-jetty.jar
  / webapps
    | myWar1.war
    | myWar2.war

解决方法:

看起来你必须设置webapp.setCopyWebInf(true);据this page来自jetty jira.

上一篇:java-Spring框架最佳实践:部署不符合Bean的组件


下一篇:java – gRPC服务器可以在另一个HTTP / 2 Web服务器上运行,比如jetty / undertow / tomcat吗?