Not running on Jetty, JSR-356 support unavailable分析与解决

Not running on Jetty, JSR-356 support unavailable分析与解决

应用部署后,启动时报错

代码:

[org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer@d3a9b786] ServletContainerInitializer(位于以下应用程序 [portal-app] 中)在调用 onStartup 方法时发生了以下错误:[javax.servlet.ServletException: Not running on Jetty, JSR-356 support unavailable        at org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.onStartup(WebSocketServerContainerInitializer.java:183)
无论是在WAS、Liberty或Tomcat等其他应用服务器上面碰到如上错误时,原因是

应用中的websocket包与应用服务器自身带的实现冲突了。

比如,pom.xml中的项目依赖:
<dependency>

<groupid>org.springframework.boot</groupid>

<artifactid>spring-boot-starter-websocket</artifactid>
</dependency>


解决方法:


在打包时将 websocket-*.jar 包排除在外即可。

在pom.xml中可以进行排除
<plugin>

<groupid>org.apache.maven.plugins</groupid>

<artifactid>maven-war-plugin</artifactid>

<configuration>

<packagingexcludes>WEB-INF/lib/websocket-*.jar</packagingexcludes>

</configuration>
</plugin>


然后,重新构建打包部署。