我以前从未尝试过这样做,而且有点沮丧。同一个包中有两个类:
package test;
public class One {
public static String test () { return "hello world"; }
}
和
package test;
public class Two {
public static void main (String[] args) {
System.out.println(One.test());
}
}
如果我在 test /目录中尝试javac Two.java
,我会找到One的“找不到符号”。但是,如果我从父目录javac test/Two
执行此操作,它会编译,然后可以运行java test/Two
- 但不能再从内部运行(抛出 NoClassDefFoundError 说该类的正确名称为test/Two
,而非Test
)。
不是什么大不了的事,但如果有更好的解决办法,并且如果有人能帮助我理解这个问题,那就很好奇。我实际上不需要“Two”成为测试包的正式成员,我只需要将它放在同一目录中并在那里编译。
答案 0 :(得分:3)
您需要使用以下命令从父目录编译:
javac test/Two.java test/One.java
(您可能还想使用-d
来说明您希望类文件的最终位置。请注意,可以只编译test/One.java
并让编译器查找它所依赖的类,但我发现只需指定要编译的所有源代码就更清晰了。)
使用包限定的类名运行:
java test.Two