我正在尝试从部署在jetty中的war内部实现jsr 356 websocket连接。
我用这个作为指南:http://aredko.blogspot.com/2013/11/java-websockets-jsr-356-on-jetty-91.html
(我可以找到很多关于使用jsr 356与嵌入式jetty服务器一起使用的教程,但没有关于在现有服务器中构建websocket连接的教程-有什么好的吗?)
每当我运行上面列出的代码时,我就会得到以下错误:
java.lang.LinkageError: loader constraint violation: when resolving method "org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer;" the class loader (instance of org/eclipse/jetty/webapp/WebAppClassLoader) of the current class, com/me/stuff/data/DataServer, and the class loader (instance of org/eclipse/jetty/start/Classpath$Loader) for resolved class, org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer, have different Class objects for the type y.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer; used in the signature指的是代码
ServerContainer container = WebSocketServerContainerInitializer.configureContext(context);我真想不出这点。我正在使用gradle中的以下行来引入websocket内容:
providedCompile (
[ group: 'javax.websocket', name: 'javax.websocket-api', version: '+'],
[ group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '+' ]
)
compile (
[ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-server-impl', version: '+'],
[ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-client-impl', version: '+']
)我看到和javax.webSocket-apIjar都包含ServerContainer classes...but,我只在war文件中包含其中一个。jetty是从它自己的旧版本中拉出来的吗?还是我完全误解了问题的根源?
我拥有的jetty版本是: jetty-9.2.1.v20140609
发布于 2014-10-28 23:14:35
websocket不应该在您的战争中。
从WAR的WEB-INF/lib/目录中删除以下WAR。
javax.websocket-api-*.jar - javax.websocket API jarjavax-websocket-server-impl-*.jar - jetty服务器javax.websocket.server.*实现jarjavax-websocket-client-impl -jettyjavax.webSocket.*(客户端) jar这是因为您正在针对javax.websocket.* API类进行编码/编译。
API和API的实现是由Jetty本身提供的。
这与使用servlet编写代码时没有什么不同。(也就是说,在WAR中不包括servlet-api和servlet-api的实现)
https://stackoverflow.com/questions/26619846
复制相似问题