VS Code编写Java出现声明包mypack与预期包不匹配,B类编译失败如何解决?
报错原因分析
- 核心原因是Java包声明和实际目录结构不匹配,触发了Java编译器/VS Code Java语言服务的包校验规则。报错
The declared package "mypack" does not match the expected package "" Java(536871240)的含义是:当前文件声明归属mypack包,但编译器认为该文件应该归属默认包(空包名)。 - 符合Java规范的目录结构要求:声明了
package mypack;的Aclass.java必须放在和包名同名的mypack子目录下,Bclass.java不需要包声明,需要放在mypack目录的上级(项目源码根目录)。如果文件摆放位置不符合这个规则,就会抛出该错误。 - 额外的触发场景:VS Code Java插件错误将
mypack目录标记为源码根目录,也会导致插件认为该目录下的文件包名应为空,和声明的mypack冲突。 - 解决包匹配问题后你还会遇到类访问权限报错:当前
A类是默认访问权限,仅允许mypack包内部的类访问,默认包下的Bclass导入后也无法调用。
解决方案
- 修正文件目录结构,按照以下结构摆放文件:
项目源码根目录 ├── mypack │ └── Aclass.java └── Bclass.java
- 修正
A类的访问权限,修改Aclass.java中A类的声明为public class A,允许跨包调用。 - 配置VS Code的源码根目录:
- 按下
Ctrl+Shift+P(Windows)/Cmd+Shift+P(Mac)调出命令面板,输入Java: Configure Java Runtime - 在「Source roots」配置项中,仅保留你的项目源码根目录,移除
mypack目录的源码根标记。
- 按下
- 命令行编译运行操作(如果使用终端执行):
- 到项目源码根目录下执行编译:
javac -d . mypack/Aclass.java Bclass.java - 运行Aclass:
java mypack.Aclass - 运行Bclass:
java Bclass
- 到项目源码根目录下执行编译:
内容的提问来源于stack exchange,提问作者Pranav Patil
相关产品推荐
相关产品推荐

