Java命令行引入外部jar编译提示package不存在问题求解
问题原因
你打包jar时没有保留decorations包对应的目录结构,Java类加载规则要求包名必须和目录结构完全对应,你的ChristmasBall类声明属于decorations包,因此在jar包中必须存放在decorations子目录下,你直接将ChristmasBall.class放在jar根目录,编译器自然找不到decorations包。
修复步骤
- 先在lib目录下创建和包名匹配的目录结构:新建
decorations文件夹,将编译好的ChristmasBall.class移动到该文件夹内 - 在lib目录下执行正确的打包命令,包含完整包目录:
jar -cvf xmas.jar decorations/ChristmasBall.class
- 执行以下命令验证打包结果,确认输出中包含
decorations/ChristmasBall.class:
jar -tf xmas.jar
编译&运行验证
打包正确后,你之前的编译命令(在src目录下执行)可以正常运行:
javac -Xlint -d ..\bin Christmas.java -cp ..\lib\xmas.jar
编译完成后如需运行,Windows系统在项目根目录执行:
java -cp bin;lib/xmas.jar Christmas
Linux/macOS系统将分号替换为冒号即可:
java -cp bin:lib/xmas.jar Christmas
内容的提问来源于stack exchange,提问作者codejunkie
相关产品推荐
相关产品推荐

