簡體   English   中英

在同一 package 中編譯兩個 java 文件時出現編譯錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM