VSCode中无法引用JAR文件内Java模块的问题求助
Java模块化JAR引用后模块解析失败及运行报错问题
问题详情
我用Java编译了一个带模块的JAR文件,模块名为something,包含animal包及其中的Dog类,JAR结构和模块定义均正确。之后在VSCode的另一个Java模块化项目中引用该JAR,在module-info.java中添加requires something;后,出现以下问题:
- 编辑时自动补全能识别
something模块,但输入后报错“something无法解析为模块” - 运行项目时提示
java.lang.module.FindException: Module app not found
自定义JAR信息
- JAR结构:
customPackage.jar : --module-info.class -- animal(folder) -- Dog.class
- 模块源码(
module-info.java):
module something { exports animal; }
- 生成方式:通过VSCode Java语言服务器扩展的引用库按钮导出为JAR
引用JAR的新项目信息
- 项目结构:
javaConsole文件夹: --module-info.java --source(folder) -- Main.java
- 模块源码(
module-info.java):
module app { requires something; exports source }
- VSCode引用配置(
settings.json):
{ "java.project.referencedLibraries": [ "lib/**/*.jar", "c:\\Users\\tutun\\OneDrive\\Documents\\customPackage\\customPackage.jar" ] }
复现步骤
- 在VSCode中创建Java模块化项目,模块名
something,添加animal包及Dog类,模块导出animal包后导出为JAR
- 在VSCode中创建Java模块化项目,模块名
- 新建另一个Java模块化项目,通过VSCode引用库功能添加上述JAR,在
module-info.java中添加requires something;
- 新建另一个Java模块化项目,通过VSCode引用库功能添加上述JAR,在
解决方案
1. 修复新项目的模块结构与语法
VSCode的Java模块化项目要求源码对应正确的模块目录结构,同时module-info.java需保证语法正确:
- 调整项目结构,让源码目录与模块名匹配(或确保
source是模块的源码根目录):
javaConsole文件夹: --module-info.java --app(folder) -- Main.java
- 修正
module-info.java的语法错误(添加分号):
module app { requires something; exports source; }
2. 确保模块化JAR被识别为模块
VSCode默认可能将JAR视为普通库,需配置模块路径:
- 将自定义JAR移入项目的
lib目录,修改settings.json:
{ "java.project.referencedLibraries": [ "lib/**/*.jar" ], "java.project.modulePaths": [ "lib" ] }
- 或在VSCode的「Java项目」面板中,将JAR从「引用库」移至「模块路径」
3. 验证模块化JAR有效性
使用命令检查JAR是否为合法模块化JAR:
jar --describe-module --file=customPackage.jar
正常输出应包含:
something@1.0 exports animal requires java.base mandated
若输出异常,重新编译打包:
javac -d out module-info.java animal/Dog.java jar --create --file=customPackage.jar -C out .
4. 配置正确的运行参数
在VSCode的「运行和调试」面板创建新的Java运行配置,选择「模块」模式,指定主类为source.Main(对应Main.java的包路径)。
内容的提问来源于stack exchange,提问作者tutuna faltu
相关产品推荐
相关产品推荐

