You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实现需求:

  1. 移除了pom.xml中所有Spark和相关Jetty的依赖
  2. 在Server类中使用Spring MVC的@GetMapping("/voice")和@PostMapping("/process")注解替代原来的Spark路由配置,完美实现了之前的功能

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:48:05