gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:21:42 25 4
gpt4 key购买 nike

我正在尝试在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-server-impl jar 和 javax.websocket-api jar 都包含 ServerContainer 类...但我只在我的 war 文件中包含其中之一。 jetty 是否从其内部旧版本中撤出?或者我完全误解了问题的根源?

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

最佳答案

websocket jar 不应该出现在您的 WAR 中。

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

  • javax.websocket-api-*.jar - javax.websocket API jar
  • javax-websocket-server-impl-*.jar - jetty 服务器 javax.websocket.server.* 实现 jar
  • javax-websocket-client-impl - jetty javax.websocket.*(客户端)jar

这是因为您正在针对 javax.websocket.* API 类进行编码/编译。

API和API的实现由Jetty本身提供。

这与针对 servlet-api 进行编码没有什么不同。 (即,您不要在 WAR 中包含 servlet-api 和 servlet-api 的实现)

关于尝试使用 jsr 时出现 java.lang.linkage 错误 356,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26619846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com