在C盘根目录编译多包下多个Java类时遇错误求助
Java跨包编译错误解决
错误原因
你遇到的Invalid filename: packagea/*.java错误,核心是路径指向错误:
- 你在C盘根目录执行命令,但直接写
packagea/*.java会让系统在C:\下查找packagea文件夹,而你的源码实际存放在C:\cert\chapter1\code目录下,路径不匹配导致找不到文件。 - Windows CMD环境中,
javac无法识别未指定完整路径的包目录通配符。
正确操作步骤
首先确认你的文件结构必须如下:
C:\ └── cert\ └── chapter1\ └── code\ ├── packagea\ │ └── ClassA.java ├── packageb\ │ └── ClassB.java └── packagec\ └── Runner.java
方式1:指定完整源码路径编译
在C盘根目录执行以下命令:
javac -cp . cert/chapter1/code/packagea/*.java cert/chapter1/code/packageb/*.java cert/chapter1/code/packagec/*.java
-cp .表示将当前目录加入类路径,确保编译后的类文件能被识别。- 所有源码路径都完整指向
cert/chapter1/code下的对应包目录。
方式2:自动匹配所有源码文件(需CMD启用扩展通配符)
先在CMD中启用扩展通配符:
cmd /E:ON
然后执行编译命令:
javac -cp . cert/chapter1/code/**/*.java
**/*.java会递归匹配cert/chapter1/code下所有子目录中的Java文件。
方式3:指定编译输出目录(推荐)
用-d参数指定编译后class文件的输出位置(比如当前目录),自动生成对应包结构:
javac -d . -cp . cert/chapter1/code/packagea/ClassA.java cert/chapter1/code/packageb/ClassB.java cert/chapter1/code/packagec/Runner.java
执行后,C盘根目录会生成packagea、packageb、packagec三个文件夹,存放对应的class文件。
运行程序
编译完成后,在C盘根目录执行:
java packagec.Runner
即可输出Hello World。
内容的提问来源于stack exchange,提问作者Peter Orgovan
相关产品推荐
相关产品推荐

