我已经下载了最新的Jetty 8 Hightide,但无法让WebSockets工作。我解压缩分发文件,将.war文件放在webapps文件夹中,然后启动:
java.lang.NoClassDefFoundError: org/eclipse/jetty/websocket/WebSocketServlet
我已经验证了JETTY_HOME/lib文件夹包含JETTY-websocket.jar,并且它包含WebSocketServlet类文件。
我以前在里程碑式的发布中也经历过这种情况。
由于某些原因,默认情况下web套接字似乎不再可用,因此上下文XML文件中需要以下代码:
<Set name="extraClasspath"><SystemProperty name="jetty.home" default="."/>/lib/jetty-websocket-<version>.jar</Set>
我在使用jetty maven插件和版本8.0.3.v20111011
时也遇到了同样的情况。然而,解决方案很简单。只需将jetty-websocket
作为已编译的作用域依赖项(即,不要声明作用域(。
pom.xml
:的相关章节
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jetty.version>8.0.3.v20111011</jetty.version>
</properties>
...
<build>
<plugins>
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-websocket</artifactId>
<version>${jetty.version}</version>
</dependency>
...
</dependencies>
copy %JETTY_ROOT%libjetty-websocket-<version>.jar %SERVLET_ROOT%WEB-INFlib
看起来对我很有用!
通过WST插件从Eclipse运行Jetty时遇到了类似的问题。以下是我解决它的方法。在工作区的.metadata目录下找到了应用程序的上下文:[workspace's.metadata]/.plugins/org.eclipse.wst.server.core/[configuration id-like'tmp1']/contexts/[app name].xml。编辑后在配置标签下包含以下内容:<Set name="extraClasspath">[jetty install dir]/lib/jetty-websocket-8.1.2.v20120308.jar;[jetty install dir]/lib/jetty-util-8.1.2.v20120308.jar</Set>
必须对Jetty安装目录进行硬编码,因为我的Jetty安装在Eclipse之外,并且执行<SystemProperty name="jetty.home" default="."/>
解析到.metadata.