尝试使用jsr 356时出现java.lang.linkage错误

尝试使用jsr 356时出现java.lang.linkage错误,java,websocket,gradle,jetty,jsr356,Java,Websocket,Gradle,Jetty,Jsr356,我正在尝试从部署在jetty的war中实现JSR356WebSocket连接 我将此作为指南: (我可以找到很多基本上与嵌入式jetty服务器一起使用JSR356的教程,但是没有关于在现有服务器中构建websocket连接的教程——有好的吗?) 每当我运行上面列出的代码时,都会出现以下错误: java.lang.LinkageError: loader constraint violation: when resolving method "org.eclipse.jetty.websocket

我正在尝试从部署在jetty的war中实现JSR356WebSocket连接

我将此作为指南:

(我可以找到很多基本上与嵌入式jetty服务器一起使用JSR356的教程,但是没有关于在现有服务器中构建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服务器impl jar和javax.websocket-api jar都包含ServerContainer类……但我在war文件中只包含其中一个。jetty是从它自己的内部旧版本开始的吗?还是我完全误解了问题的根源


我拥有的jetty版本是:jetty-9.2.1.v20140609

websocket罐子不应该出现在您的战争中

从WAR的
WEB-INF/lib/
目录中删除以下JAR

  • javax.websocket api-*.jar
    -javax.websocket api jar
  • javaxwebsocket服务器impl-*.jar
    -jetty服务器javax.websocket.server.*实现jar
  • javaxwebsocket客户端impl
    -jettyjavax.websocket.*(客户端)jar
这是因为您正在针对
javax.websocket.*
API类进行编码/编译

API和API的实现由Jetty自己提供

这与针对servlet api编写代码时没有什么不同。(即,在WAR中不包括servlet api和servlet api的实现)