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

Java 21项目中jjwt-api自动模块编译找不到问题排查

问题原因

这是Gradle处理模块化依赖的逻辑差异导致的:

  • 你的ModuleFinder代码直接指定jar路径,Java会按规则将其推断为自动模块jjwt.api;IntelliJ的提示混淆了依赖坐标名(jjwt-api)和实际自动模块名(jjwt.api),但它确实能识别到模块存在。
  • 但Gradle默认会把既无module-info.java也无Automatic-Module-Name的依赖放到类路径,而非模块路径。javac在编译模块化项目时只会扫描模块路径找模块,因此找不到jjwt.api而报错。
解决方案

有两种靠谱的解决办法:

方法1:让Gradle把依赖放到模块路径

在build.gradle.kts里添加配置,强制Gradle将所有可推断为模块的依赖(包括自动模块)加入模块路径:

java {
    modularity.inferModulePath.set(true)
}

dependencies {
    implementation("io.jsonwebtoken:jjwt-api:0.12.5")
    runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.5")
    runtimeOnly("io.jsonwebtoken:jjwt-gson:0.12.5")
}

开启inferModulePath后,Gradle会自动处理自动模块,javac就能找到jjwt.api了。

方法2:兼容类路径依赖(放弃模块化约束)

如果不需要严格遵循模块化规则,可以修改module-info.java:

  • 要么直接删掉requires jjwt.api;语句,让代码从类路径加载jjwt的类;
  • 要么用requires static jjwt.api;,仅在编译时检查模块存在,运行时从类路径加载。
    这种方式简单但会丢失模块化的强封装特性,适合临时兼容场景。

额外检查

先跑你的ModuleFinder代码,确认输出的模块名确实是module jjwt.api,确保module-info.java里的requires语句和实际模块名完全一致,避免拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:40:20