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

使用JPMS和ServiceLoader运行Javalin时出现NoClassDefFoundError异常

问题描述

结合JPMS(Java平台模块系统)与ServiceLoader运行Javalin应用时,抛出NoClassDefFoundError: kotlin/NoWhenBranchMatchedException异常,但以下两种方式运行相同代码可正常工作:

  • 不使用JPMS和ServiceLoader:将该Javalin应用不作为JPMS模块运行,且不通过ServiceLoader解析依赖,运行无异常。
  • 控制台应用:运行作为标准JPMS模块并使用ServiceLoader解析依赖的控制台应用,可正常工作。

问题复现步骤

  1. 克隆项目main分支
  2. 在项目根目录执行命令运行API:
# Windows
.\gradlew.bat :api:run

# Linux
./gradlew :api:run

执行后出现如下错误:

> Task :api:run FAILED
[main] INFO org.example.api.WebAPI - Hello World from WebAPI, yay :-)
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/NoWhenBranchMatchedException
        at io.javalin@4.6.4/io.javalin.core.JavalinConfig$Inner.<init>(JavalinConfig.java:77)
        at io.javalin@4.6.4/io.javalin.core.JavalinConfig.<init>(JavalinConfig.java:67)
        at io.javalin@4.6.4/io.javalin.Javalin.<init>(Javalin.java:54)
        at io.javalin@4.6.4/io.javalin.Javalin.create(Javalin.java:91)
        at io.javalin@4.6.4/io.javalin.Javalin.create(Javalin.java:78)
        at org.example.api/org.example.api.WebAPI.main(WebAPI.java:24)
Caused by: java.lang.ClassNotFoundException: kotlin.NoWhenBranchMatchedException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 6 more
FAILURE: Build failed with an exception.

可行的运行方式

  1. 不使用JPMS和ServiceLoader:切换到项目的no-jpms-and-serviceloader分支,执行以下命令可成功运行API:
# Windows
.\gradlew.bat :api:run

# Linux
./gradlew :api:run
  1. 控制台应用:在任意分支中执行以下命令运行控制台应用,均可正常工作:
# Windows
.\gradlew.bat :client:run

# Linux
./gradlew :client:run

内容的提问来源于stack exchange,提问作者baumgarb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:54:24