Gradle+JavaFX项目引入Tess4j遇模块找不到编译运行错误求助
解决Tess4J在模块化Gradle+JavaFX项目中的模块找不到问题
核心问题分析
- 编译报错
module not found: tess4j:Gradle编译阶段未将Tess4J依赖加入模块路径,尽管IDE能识别依赖并自动补全requires tess4j;,但编译时需要显式配置模块路径才能识别自动模块。 - 运行时
Module supermarket not found:一是mainClass配置未遵循模块化项目的格式要求;二是你使用的jlink插件仅支持带module-info的显式模块,而Tess4J 5.x属于自动模块(通过MANIFEST.MF定义模块名),无法被jlink打包,导致运行时找不到模块。
快速解决方案(移除jlink,适合大多数场景)
如果不需要自定义Java运行时镜像,直接移除jlink相关配置,调整Gradle和模块设置即可解决问题:
1. 修改build.gradle配置
- 删除jlink插件及对应配置:
// 删掉以下内容 // id 'org.beryx.jlink' version '3.0.1' // ... // jlink { // options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages'] // launcher { // name = 'supermarket' // } // } - 修正
mainClass配置(必须遵循模块名/全限定主类名格式,假设你的主类是supermarket.Main):application { mainClass = 'supermarket/supermarket.Main' } - 添加编译参数,确保Tess4J被加入模块路径:
tasks.withType(JavaCompile) { options.compilerArgs += [ '--module-path', classpath.asPath, '--add-modules', 'tess4j' ] }
2. 验证与构建
- 执行
./gradlew clean build清理并重新构建项目 - 运行项目:
./gradlew run
进阶方案(保留jlink,适合需要自定义运行时的场景)
jlink不支持自动模块,需手动将Tess4J转为显式模块:
- 下载Tess4J 5.13.0的jar包,解压后在根目录添加
module-info.java:module tess4j { exports net.sourceforge.tess4j; exports net.sourceforge.tess4j.util; requires java.desktop; requires java.logging; requires org.slf4j; opens net.sourceforge.tess4j to com.google.guava; } - 使用
javac编译该module-info.java,重新打包成jar文件 - 将自定义的显式模块jar替换项目中依赖的Tess4J jar,或发布到本地Maven仓库后引入
- 在build.gradle的javafx模块配置中添加
tess4j:javafx { version = "22.0.1" modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.swing', 'tess4j' ] } - 重新执行jlink打包:
./gradlew jlink
额外检查项
- 确认主类的全限定名正确,且确实位于
supermarket模块下 - 执行
./gradlew dependencies检查Tess4J是否出现在项目依赖树中 - 若IDE仍有异常提示,执行Gradle同步并重启VSCode
内容的提问来源于stack exchange,提问作者Yuji
相关产品推荐
相关产品推荐

