使用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,classloader,war,jetty,embedded-jetty 来源: https://codeday.me/bug/20190625/1285595.html