使用Gradle构建模块化JavaFX应用时javax.json模块找不到
解决步骤
1. 修正module-info.java中的模块名称错误
当前编译错误的核心是依赖的模块名称写错了:
org.glassfish:javax.json的实际模块名是org.glassfish.json,而非org.glassfishjavax.json-api的模块名确实是javax.json,这部分无需修改- jOpenDocument是非模块化JAR,它的自动模块名为
jOpenDocument(自动模块名规则:去掉JAR文件名的版本号与后缀),若代码中用到该库,需添加对应的requires声明
修正后的module-info.java:
module hellofx { requires javafx.controls; requires org.apache.logging.log4j; // 正确的JSON API与实现模块名 requires javax.json; requires org.glassfish.json; // 非模块化依赖jOpenDocument的自动模块名 requires jOpenDocument; exports org.openjfx; }
2. 调整Gradle配置,对齐Java版本
将Java版本配置为你实际使用的OpenJDK 14,避免版本不一致导致的潜在问题:
修改build.gradle中的版本配置:
sourceCompatibility = "14" targetCompatibility = "14"
org.javamodularity.moduleplugin插件会自动处理自动模块依赖,无需额外配置模块路径。
3. 解决Eclipse未解析导入错误
Eclipse的模块依赖识别需要Gradle生成正确的项目配置,执行以下命令重新生成Eclipse文件:
./gradlew eclipse
之后在Eclipse中右键项目 → Refresh,重新导入项目即可解决未解析导入的问题。
4. 验证编译与打包
执行编译任务验证修改:
./gradlew compileJava
确认无错误后,可尝试运行或打包:
./gradlew run ./gradlew jlink
额外说明
- 若某个依赖仅在编译时需要、运行时可选,可将
requires替换为requires static - Badass JLink Plugin支持模块化JAR与自动模块(非模块化JAR转换而来),jOpenDocument符合打包要求,无需额外处理
内容的提问来源于stack exchange,提问作者CT95
相关产品推荐
相关产品推荐

