2012-12-04 25 views
1

我試圖將Jetty配置爲http和https的代理。 我已經下載了兩個不同版本的碼頭,但我都遇到了同樣的問題。Jetty Proxy ClassNotFoundException

我目前使用的版本是:在CentOs 6.2上運行的jetty-distribution-8.1.8.v20121106。

拆包tar.gz的,我已經修改了start.ini文件中添加等/碼頭,名爲proxy.xml 到配置文件列表:

#etc/jetty-jmx.xml 
etc/jetty.xml 
<b>etc/jetty-proxy.xml</b> 
etc/jetty-annotations.xml 
etc/jetty-ssl.xml 
# etc/jetty-requestlog.xml 
etc/jetty-deploy.xml 
#etc/jetty-overlay.xml 
etc/jetty-webapps.xml 
etc/jetty-contexts.xml 
etc/jetty-testrealm.xml 

碼頭定期啓動。我可以訪問它:

http://localhost:8080/ 
https://localhost:8443/ 

閱讀似乎三個抽象接口已開始在端口8080,8443和8888的日誌文件:

 
2012-12-04 12:40:03.400:INFO:oejs.AbstractConnector:Started [email protected]:8080 
2012-12-04 12:40:03.666:INFO:oejus.SslContextFactory:Enabled Protocols [SSLv2Hello, SSLv3, TLSv1] of [SSLv2Hello, SSLv3, TLSv1] 
2012-12-04 12:40:03.668:INFO:oejs.AbstractConnector:Started [email protected]:8443 
2012-12-04 12:40:03.668:INFO:oejs.Server:jetty-8.1.8.v20121106 
2012-12-04 12:40:03.732:INFO:oejs.AbstractConnector:Started [email protected]:8888 

當我配置瀏覽器訪問代理8888端口,碼頭失敗,出現以下異常:

2012-12-04 12:40:13.463:WARN:oejs.ServletHandler:Error for /search 
java.lang.NoClassDefFoundError: org/eclipse/jetty/client/HttpExchange 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
    at java.lang.Class.getConstructor0(Class.java:2699) 
    at java.lang.Class.newInstance0(Class.java:326) 
    at java.lang.Class.newInstance(Class.java:308) 
    at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:941) 
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:501) 
    at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:402) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:642) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
    at org.eclipse.jetty.server.Server.handle(Server.java:365) 
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) 
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) 
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: 
java.lang.ClassNotFoundException: org.eclipse.jetty.client.HttpExchange 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
... 

我已經驗證該文件夾$ JETTY_HOME/lib目錄中包含的jar文件:

jetty-client-8.1.8.v20121106.jar 

包含類org.eclipse.jetty.client.HttpExchange。 要執行的碼頭我用命令: 斌/ jetty.sh開始

命令斌/ jetty.sh檢查返回以下信息:

Checking arguments to Jetty: 
JETTY_HOME  = /home/dude/Downloads/jetty-distribution-8.1.8.v20121106 
JETTY_CONF  = /home/dude/Downloads/jetty-distribution-8.1.8.v20121106/etc/jetty.conf 
JETTY_RUN  = /tmp 
JETTY_PID  = /tmp/jetty.pid 
JETTY_PORT  = 
JETTY_LOGS  = 
START_INI  = /home/dude/Downloads/jetty-distribution-8.1.8.v20121106/start.ini 
CONFIGS  = --pre=etc/jetty-logging.xml 
JAVA_OPTIONS = -Djetty.home=/home/dude/Downloads/jetty-distribution-8.1.8.v20121106-Djava.io.tmpdir=/tmp 
JAVA   = /data/dude/java/bin/java 
CLASSPATH  = 
RUN_CMD  = /data/dude/java/bin/java -Djetty.home=/home/dude/Downloads/jetty-distribution-8.1.8.v20121106 -Djava.io.tmpdir=/tmp -jar /home/dude/Downloads/jetty-distribution-8.1.8.v20121106/start.jar --pre=etc/jetty-logging.xml 

Jetty running pid=15498 

謝謝

回答

2

在啓動選項.ini添加客戶端,代理環境要求客戶端工件可用。就像使用ProxyServlet一樣,您需要在servlet web-inf/lib目錄中擁有jetty-client及其依賴關係。

無論如何,這會告訴你可能的選項,以及當你運行它時到什麼類型路徑上。 start.jar真的只是幫助構建jetty運行的環境。

Java的罐子給你的命令行例子,這將是在給定的配置地方start.jar --list選項

這將顯示你的東西如何目前設置:

Java的罐子start.jar --dry運行

如需更多幫助,就可以看:

java -jar start。罐子--help

或看這裏:

http://wiki.eclipse.org/Jetty/Feature/Start.jar

+0

謝謝傑西。這解決了這個問題。 – user1876612