我正在尝试为我的web项目添加额外的类路径。为此,我已关注this guide并创建了一个包含以下内容的jetty-env.xml
文件
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="extraClasspath">lib/ivy/</Set>
</Configure>
并将其放在WEB-INF/
文件夹中。但是,当我启动Jetty时,我得到以下异常:
2017-04-13 15:55:41.937:WARN:oejw.WebAppContext:main: Failed startup of context o.e.j.w.WebAppContext@51931956{/server,file:/C:/Users/foo/project/webapps/server/,STARTING}{C:\Users\foo\project\webapps\server}
java.lang.IllegalArgumentException: Object of class 'org.eclipse.jetty.webapp.WebAppContext' is not of type 'org.eclipse.jetty.webapp.WebAppContext'. Object Class and type Class are from different loaders. in file:/C:/Users/foo/project/webapps/server/WEB-INF/jetty-env.xml
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:296)
at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:248)
at org.eclipse.jetty.plus.webapp.EnvConfiguration.configure(EnvConfiguration.java:124)
at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:479)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1337)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41)
at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
at org.eclipse.jetty.deploy.providers.WebAppProvider.fileAdded(WebAppProvider.java:440)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
...
at org.eclipse.jetty.start.Main.main(Main.java:112)
我做错了什么以及如何解决?
答案 0 :(得分:1)
您无法在WebApp启动过程中添加额外的类路径条目(为时已晚,此时WebAppClassloader
已存在)。
必须在WebAppContext
部署之外定义,以便WebApp的启动可以使用它。
您需要一个可部署的XML。
假设你的战争是${jetty.base}/webapps/myserver.war
创建${jetty.base}/webapps/myserver.xml
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/myserver</Set>
<Set name="war"><Property name="jetty.webapps" default="."/>/myserver.war</Set>
<Set name="extraClasspath">/full/path/to/my/extra/lib/ivy/</Set>
</Configure>
另请注意:extraClasspath
不能是相对路径。它必须是一条绝对的道路。
如果您有扩展的目录Web应用程序部署,请考虑采用类似的方法。
假设您有${jetty.base}/webapps/foo/
创建${jetty.base}/webapps/foo.xml
文件
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/foo</Set>
<Set name="war"><Property name="jetty.webapps" default="."/>/foo/</Set>
<Set name="extraClasspath">/full/path/to/my/extra/lib/ivy/</Set>
</Configure>
答案 1 :(得分:1)
我想出来了。我在WEB-INF/lib
文件夹中有一个jetty-all jar文件。删除它解决了问题。