问题场景:两个java文件A,B,在同一个目录D, A需要用到B的类, 用cmd进入D目录编译A时报的错。
遇到这个问题的比较多, 我就总结下吧:
1、环境变量classpath没有配好 配好后, javac A B javac B A或者javac *.java就行
说没有配好有两个情况: 一是 点前面有空格啥的 二是没有配点
当然不配classpath javac -classpath 指定目录也可以
2、package 定义出现了问题
文件的开头定义了package, 把他去掉就好了
拓展下吧: 我看别的博客里有对不同目录下javac怎么编译的问题。 我就研究了下, 终于弄出来了
package d1.d2 A文件 第一行
package d3.d4 B文件 第一行
d1目录和d3目录都在src目录下
那么A文件应该放在src/d1/d2目录下 B文件同理放在src/d3/d4目录下 ,B文件引用A文件中的类,因此B文件 需要导入A文件,因此B文件加上 import d1.d2.A
打开命令窗口,进入src目录, 输入javac d1/d2/*.java d3/d4/*.java 编译成功。 然后在src/d1/d2/和src/d3/d4下可以看到生成的class文件
如果不想把生成的class文件放在src里面,而是放在与src同级的目录下, 那么操作类似:
第一步: 进入src的上级目录(此时该目录下先建好build目录)
第二部:javac -d build src/d1/d2/*.java src/d3/d4/*.java
javac 的 -sourcepath参数介绍, 他指定项目的根目录, 也就是我的例子里面的src目录, 前面两个例子都没指定都可以成功,说明javac自己能找到,应该是根据package d1.d2这种,把d1的上级目录当做了src目录。 值得注意的一点是,虽然项目路径不同,通过 加参数-sourcepath src1;src2 这种方式也能编译成功; 但是不能运行,报错无法加载主类, 这种情况我就不继续研究了, 我不认为会出现一个项目会用到另外一个项目的文件。 就这样吧