Spring Boot集成Spark启动时出现NoClassDefFoundError: spark/embeddedserver/jetty/JettyHandler错误的求助
Spring Boot集成Spark启动时出现NoClassDefFoundError: spark/embeddedserver/jetty/JettyHandler错误的求助
问题背景
我最近在开发一个结合Spring Boot与Spark框架的服务端程序,相关代码和启动配置如下:
Server.java
package server; import static spark.Spark.get; import static spark.Spark.port; import static spark.Spark.post; import phone.PhoneSystem; public class Server { public static void run() { port(4567); try(PhoneSystem phone = new PhoneSystem()) { get("/voice", (request, response) -> { return phone.startupMessage(request, response); }); post("/process", (request, response) -> { return phone.messageLoop(request, response); }); } } }
MyApplication.java
package server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); Server.run(); } }
我使用以下Maven命令启动程序:
mvn exec:java -Dexec.mainClass="server.MyApplication"
但启动后抛出了如下错误:
java.lang.NoClassDefFoundError: spark/embeddedserver/jetty/JettyHandler at spark.embeddedserver.jetty.EmbeddedJettyFactory.create (EmbeddedJettyFactory.java:51) at spark.embeddedserver.EmbeddedServers.create (EmbeddedServers.java:80) at spark.Service.lambda$init$2 (Service.java:624) at java.lang.Thread.run (Thread.java:1447) Caused by: java.lang.ClassNotFoundException: spark.embeddedserver.jetty.JettyHandler at org.codehaus.mojo.exec.URLClassLoaderBuilder$ExecJavaClassLoader.loadClass (URLClassLoaderBuilder.java:211) at java.lang.ClassLoader.loadClass (ClassLoader.java:490) at spark.embeddedserver.jetty.EmbeddedJettyFactory.create (EmbeddedJettyFactory.java:51) at spark.embeddedserver.EmbeddedServers.create (EmbeddedServers.java:80) at spark.Service.lambda$init$2 (Service.java:624) at java.lang.Thread.run (Thread.java:1447)
我的pom.xml依赖配置:
<dependency> <groupId>com.sparkjava</groupId> <artifactId>spark-core</artifactId> <version>2.9.4</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>9.4.44.v20210927</version> </dependency>
已尝试的解决方法
- 尝试切换到Spark 3.0.0版本,但发现该版本并未发布在Maven中央仓库
- 移除Jetty相关依赖,问题仍然存在
- 在pom.xml中配置Spark快照版本的仓库依赖,还是出现相同的错误信息
最终解决方法(更新于2025年7月25日)
我最终放弃了Spark框架,完全基于Spring Boot实现需求:
- 移除了pom.xml中所有Spark和相关Jetty的依赖
- 在Server类中使用Spring MVC的
@GetMapping("/voice")和@PostMapping("/process")注解替代原来的Spark路由配置,完美实现了之前的功能
内容来源于stack exchange
相关产品推荐
相关产品推荐

