[英]Compiling error while compiling two java files in the same package that use each other
假设我们在同一个目录下有两个.java文件。
测试.java:
public class Test {
public void func() {
System.out.println("Hello World");
}
}
主要.java:
public class Main {
public static void main(String args[]) {
Test t = new Test();
t.func();
}
}
如果我在命令行中写: javac Main.java
它创建 Main.class 并自动创建 Test.class 和运行这个程序我使用: java Main
但是当我在两个文件的第一行中添加package myPack语句时,一切都发生了变化。 文件结构如下:
我的包
├── Main.java
└── 测试.java
如果我写javac Main.java编译器会说:
Main.java:5: 错误: 找不到符号 Test t = new Test();
我应该同时编译它们。 (javac Main.java Test.java)
问题1)为什么会发生?
问题 2)当我编译这两个文件时,我无法使用java Main 运行程序。
(错误:无法找到或加载主 class 主)。
有什么问题?
问题 3)我在某处读到您应该从父目录编译并运行它,如下所示: javac myPack/Main.java (它会自动创建 Test.class 文件),然后是 Z93F725A07423FE1C889F448B3D3 。 这样程序才能正常工作。 但是我们为什么要使用这种语法从父目录编译和运行程序呢?
试试这个编译
# compile all files .java in folder ./myPack and outputing in ./folder-compiled
javac -d folder-compiled $(find ./myPack -name '*.java')
所以你可以用这个运行所有编译的 class
# run all Main.class already compiled in ./folder-compiled
java -cp folder-compiled Main
上面的这个例子会起作用,因为我正在考虑你的类路径在 myPack/* 中,而你没有使用模块化类路径 jdk9+ 以其他方式可能会有所不同
另一种简单易行的方法是使用构建工具,例如 gradle 或 maven
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.