2017-04-13 30 views
0

我想向我的web項目添加額外的類路徑。要做到這一點我跟了this guide並建立了一個jetty-env.xml文件,內容如下java.lang.IllegalArgumentException:類'org.eclipse.jetty.webapp.WebAppContext'的對象的類型不是'org.eclipse.jetty.webapp.WebAppContext'

<?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/文件夾中。然而,當我啓動碼頭時,我得到以下異常:

2017-04-13 15:55:41.937:WARN:oejw.WebAppContext:main: Failed startup of context [email protected]{/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

我想通了這一點。我曾在WEB-INF/lib文件夾jetty-all jar文件。刪除它解決了問題。

1

您不能從Web應用程序啓動(其爲時已晚,已經WebAppClassloader由點存在)中添加額外的類路徑條目。

具有到WebAppContext部署之外定義,以使Web應用程序的啓動可以使用它。

你需要一個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/

web應用程序創建${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> 
+0

我沒有war文件,但在我的webapps文件夾中有一堆子文件夾,每個文件夾都是不同的項目。在這種情況下如何配置它,以便所有這些項目都可以使用extraClasspath? – Chin

+0

我做你的編輯答案,但現在我有這個問題完全相同的問題:http://stackoverflow.com/questions/26128278/managing-many-jars-via-webappcontext-extraclasspath我必須手動指定每個的文件夾內的JAR。 – Chin

+0

這是正確的,'extraClasspath'中沒有glob支持,你必須指定你希望webapp使用的每個classpath根對象(要麼是擴展類路徑引用的目錄,要麼是jar文件)。坦率地說,如果你有超過2個extraClasspath條目,你有一個部署反模式,並需要評估你爲什麼需要這個額外類路徑。 –

相關問題