spring Boot WebService部署失敗:排查Jar包缺失問題
在spring boot中構建WebService服務時,部署和運行問題時有發生。本文分析一個常見的案例:“Spring Boot構建的WebService服務發布測試失敗,提示找不到Jar包”。
問題描述:
運行程序時拋出Java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager異常,表明找不到org.eclipse.jetty.server.SessionManager類。該錯誤出現在使用CXF框架發布WebService服務時。錯誤信息片段如下:
立即學習“Java免費學習筆記(深入)”;
20:45:16.837 [main] DEBUG org.apache.cxf.resource.DefaultResourceManager - resolving resource <org.apache.cxf.wsdl11.WSDLManagerImpl> type <interface org.apache.cxf.Bus> 20:45:16.837 [main] DEBUG org.apache.cxf.resource.DefaultResourceManager - resolving resource <null> type <interface org.apache.cxf.Bus> 20:45:16.932 [main] DEBUG org.apache.cxf.transport.http_jetty.JettyHttpServerEngineFactory - creating jetty http server engine for port 8000. Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager at org.apache.cxf.transport.http_jetty.JettyHttpServerEngineFactory.getOrCreate(JettyHttpServerEngineFactory.java:116) ... Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.SessionManager at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ...
錯誤提示缺少Jetty相關的Jar包,而Jetty是CXF默認使用的HTTP服務器之一。代碼使用了JaxWsServerFactoryBean發布服務,說明這是一個基于CXF的WebService項目。
問題分析與解決:
根本原因是項目缺少必要的Jetty依賴。雖然可能已添加部分依賴,但這些依賴可能不適用于Spring Boot環境。 Spring Boot推薦使用cxf-spring-boot-starter-jaxws簡化CXF集成。此外,還需要添加cxf-rt-transports-http-jetty和cxf-rt-transports-websocket (如果需要Websocket支持)來支持Jetty HTTP傳輸和Websocket傳輸。
正確的依賴配置如下:
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-websocket</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.5.5</version> </dependency>
添加這些依賴后,項目將包含Jetty相關的類,解決java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager異常,成功發布WebService服務。 請根據實際情況選擇合適的版本號,例如替換3.5.5為最新穩定版本。