簡體   English   中英

Java“無法找到或加載主類”,類路徑錯誤

[英]Java “could not find or load main class” with classpath error

在Java中使用-cp或-classpath標志進行編譯時,我遇到了一個問題。 我將嘗試解釋下面的問題:

我們說吧; 我有兩個文件 - A.java和B.java。 A.java有一個簡單的公共類,它有一個私有實例變量,一個get和一個set方法。 B.java是A的驅動方法。它實例化A; 為A的實例變量設置一些值,最后使用A中的get方法打印出該值。

我可以從命令行編譯A.java和B.java。 如果兩個編譯的類文件都在同一個文件夾中; 以下運行正常:

java B

然而; 說我把A.class保存在一個單獨的文件夾中。 甚至更好; 我創建了一個類文件A.class的JAR文件。 現在; 我應該能夠使用正確陳述的類路徑編譯B.java。

編譯工作。

javac -cp ..\\Lib\\A.jar -d ..\\Bin B.java

它按預期將B.class文件放在Bin文件夾中。 現在; 如果我去Bin文件夾並嘗試執行以下操作;

java -cp ..\Lib\A.jar B

我收到錯誤:

Error: Could not find or load main class B

現在; 過去幾天我一直試圖解決這個問題。 這是一個簡單的用例來演示這個問題; 但實際上 - 我無法使用-classpath或-cp標志鏈接到現有的JAR庫。 我可以從命令行運行Java程序的唯一方法是從JAR存檔中提取類文件與輸出類在同一目錄中。 那么,我就不需要在執行命令中包含classpath標志。

但這是我不想要的。 我想將我的JAR存檔與源代碼的輸出類文件分開。 我知道使用IDE; 這是我不需要擔心的事情。 但我對命令行解決方案更感興趣; 了解引擎蓋后面的內容。

我已經對StackOverflow上的所有其他建議進行了討論 - 但似乎沒有任何建議。 僅供參考,我在所有情況下都使用默認包。 沒有明確指定包裝。

請幫忙。 提前致謝!

更新:我被要求以可讀格式提供我的目錄結構,所以這里是:

$pwd
C:\My\Path\To\Java\Programs\Top
$ls
Source
Bin
Lib
$cd Bin 
$ls
B.class
$ls ..\Source\
A.java
B.java
$ls ..\Lib
A.jar
$jar tf ..\Lib\A.jar
META-INF
META-INF/MANIFEST.MF
A.java
A.class

我希望能夠清除它。 我使用的是Windows Powershell,因此子目錄標有“\\”。 如果我在Unix終端中輸入,那么它將是“/”。 順便說一句,我在Ubuntu 14.04上試過這個,但沒有用。 我也用jdk 1.6到jdk 1.8進行了測試 - 同樣的錯誤。

在嘗試運行程序時,您錯過了“類路徑”。

有人誤以為“-cp .. \\ Lib \\ A.jar”是在運行時包含A.class。 但問題是,“-cp”選項是設置類路徑而不包括。 這樣就缺少了類“B”的類路徑。

因此,要運行程序,從“Bin”文件夾,正確的命令(對於任何Windows系統)是:“java -cp。; .. \\ Lib \\ A.jar B”。 “。” 使用當前目錄,完全不同。

對於Linux,來自“Bin”文件夾的命令變為:“java -cp。:../ Lib / A.jar B”。

主要區別在於分隔符,“ ; ”用於Windows,“ ”用於Linux。

而不是以下:

java -cp .. \\ Lib \\ A.jar B.

提供這個

java B -cp .. \\ Lib \\ A.jar

謝謝,

Aritra

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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