[英]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.