我已经回到使用JDK8、Jetty和SPDY,我发现现在Jetty 9.2支持ALPN协议而不是NPN(请查看我的问题如何在JDK8上运行支持SPDY的Jetty?)。因此我设置了bootclasspath
:
java -Xbootclasspath/p:c:/jars/alpn-boot/alpn-boot-8.0.0.v2014031 ...
但是现在我遇到了异常:
Exception in thread "xyz.server" java.lang.NoClassDefFoundError:
org/eclipse/jetty/npn/NextProtoNego$ServerProvider
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
...
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:63)
at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:53)
at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:43)
at xyz.my.my_httpsrv_jetty.startHTTPSServer(my_httpsrv_jetty.java:359)
...
我使用的是java版本号为"1.8.0_05"
,jetty版本为9.2.2.v20140723。
在WinXP系统中,我使用JDK 1.7和alpn-boot-7.0.0.v20140317.jar
时遇到了相同的错误,在这里我将其从-Xbootclasspath/p:c:/jars/npn-boot/npn-boot-1.1.7.v20140316.jar
修改为其他值。
这个异常指向我的代码:
SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory);
似乎即使使用ALPN,Jetty仍需要npn-boot类。这是一个bug还是我做错了什么?