Java 允许每个文件有多个顶级类声明,条件是这些类中最多有一个是公共的。
但是,Oracle Java 编译器似乎无法解决这些依赖关系。考虑:
// One.java
package jtest;
import jtest.Three;
public class One {}
// Two.java
package jtest;
public class Two {}
class Three {}
第一次编译尝试以错误结束:
javac -cp . jtest\One.java
jtest\One.java:3: error: cannot find symbol
import jtest.Three;
^
symbol: class Three
location: package jtest
1 error
然而,这按预期工作
javac -cp . jtest\Two.java
javac -cp . jtest\One.java
现在,这是“已知”行为(例如,在这个答案中报告了)。但是,大多数构建系统似乎都没有与场景有关的问题(我尝试过 Eclipse 和 Apache Buildr)。他们如何解决问题?
还要考虑 Eclipse 和 Apache Buildr 都可以编译它而无需担心:
// One.java
package main;
import main.Four;
public class One {}
class Three {}
// Two.java
package main;
import main.Three;
public class Two {}
class Four {}