发新话题

javac 编译多个互相关联、互相依赖的java类

目录结构如下
d:/temp/c1/Class1.java
package c1;
import c2.Class2;
public class Class1 {
  Class2 class2;
}

d:/temp/c2/Class2.java
package c2;
import c1.Class1;
public class Class2 {
  Class1 class1;
}


他们是互相依赖的关系,如果你单独编译任何一个都会出现错误
引用:
D:\temp\c1>javac Class1.java
Class1.java:1: 软件包 c2 不存在
import c2.Class2;
^
Class1.java:3: 找不到符号
符号: 类 Class2
位置: 类 Class1
Class2 class2;
^
2 错误


所以,编译的时候,必须将它们同时编译即可
引用:
D:\temp>javac c1/*.java c2/*.java

D:\temp>
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP
此文有异议,经测试,直接编译也是可以的。不知道为何我当时测试的时候就是不行!
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP
跟据你的做了一个测试,如下目录:
src
├─test1
│ Test1.java

└─test2
Test2.java
以编译Test1.java为例,
---------------------------------------------
先在src路径下编译
x:\src>javac test1/Test1.java,
没有出现任何问题,执行后结果为理想结果.

结论一:编译路径src 下可以找到源文件test1/Test1.java,test2/Test2.java,可以直接编译
---------------------------------------------------
然后在src/test1路径下编译:
x:\src\test1>javac Test1.java
出现如下错误:

Test1.java:3: 软件包 test2 不存在
import test2.Test2;
^
Test1.java:12: 找不到符号
符号: 类 Test2
位置: 类 test1.Test1
Test2 t = new Test2();
^
Test1.java:12: 找不到符号
符号: 类 Test2
位置: 类 test1.Test1
Test2 t = new Test2();
^
3 错误

结论二:编译路径src/test1下找不到源文件test2/Test2.java,故无法编译
-------------------------------------------------------
再同时编译两个相互引用的文件

x:\src\test1>javac Test1.java ../test2/Test2.java

可以正确编译,结果正确!
结论三:编译路径src/test1下找不到源文件test2/Test2.java,将Test2.java同时编译即可.
今天很残酷,明天很残酷,后天很美好,大部分人都死在明天晚上。
编辑 回复 快速回复 TOP
发新话题