桟橋に展開された戦争内から jsr 356 websocket 接続を実装しようとしています。
私はこれをガイドとして使用しています: http://aredko.blogspot.com/2013/11/java-websockets-jsr-356-on-jetty-91.html
(Jetty サーバーが組み込まれた jsr 356 を基本的に使用するチュートリアルはたくさんありますが、既存のサーバー内で 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 ファイルにはそのうちの 1 つだけを含めています。jetty は内部の古いバージョンから引っ張っていますか? それとも、問題の原因を完全に誤解していますか?
私が持っている桟橋のバージョンは次のとおりです: jetty-9.2.1.v20140609