2010-08-26 45 views
1

我是新來的,從命令行使用Java,我不明白。我讀過以前的CLASSPATH問題,但仍然沒有解決我的問題。CLASSPATH 101 ...(在Windows上)

我在C下面的類:\ TEMP \ A \ B \ C

package a.b.c; 

public class Hello 
{ 
     public static void main(String args[]) 
     { 
      System.out.println("Hello World!"); 
     } 
} 

包名稱是故意的。 我編譯它很好,我把裏面的C中的Hello.class文件:\ TEMP \ A \目標

現在,在命令行,我去C:\ TEMP \並執行以下命令:

java -cp .\a\target a.b.c.Hello 

它抱怨說找不到類abcHello

在此先感謝!

+0

試試java命令一個/目標a.b.c.Hello – mhshams 2010-08-26 15:41:09

回答

3

和我把裏面的C中的Hello.class文件:\ TEMP \ A \目標

這是不對的。它應該放在與.java文件相同的文件夾中。源代碼本身被聲明爲package a.b.c;,所以.class文件應該保存在\a\b\c文件夾中。

然後執行它只是做:

C:\Temp>java -cp . a.b.c.Hello 
+0

我這樣做是故意,因爲我的工作在其他項目上不具備在同一文件夾作爲源文件中的類文件。我想從這個簡單的例子中學習更大的項目。 – user431336 2010-08-26 15:39:48

+0

然後,你需要更改代碼的'package'聲明匹配'a.target'。 – BalusC 2010-08-26 15:40:31

+0

嘛,不一定在同一* *文件夾,但在相同的文件夾結構。 – OscarRyz 2010-08-26 15:47:25

0

避免 「把」 的類文件的任何地方。下面應該工作:

javac -d c:\temp c:\temp\a\b\c\Hello.java 
# creates Hello.class in c:\temp\a\b\c 
java -cp c:\temp a.b.c.Hello 
+0

現在明白了......謝謝! – user431336 2010-08-26 15:51:52

0

Java將嘗試從target開始搜索目錄結構a\b\c,當你發現,它不會工作。

移動整個目錄到target,你會沒事的,就應該是這樣的:

C:\Temp\a\target\a\b\c\Hello.class 

您可以使用-d選項編譯它高大的編譯器放置類文件。

許多項目結構都是這樣的。

C:\whatever\projectname\src 
C:\whatever\projectname\classes 
C:\whatever\projectname\bin 
C:\whatever\projectname\lib 
C:\whatever\projectname\doc 

這樣,你可以在你的項目目錄,鍵入始終步驟:

javac -d classes src\*.java 

這將彙編在src目錄中的所有資源,將它們放置在classes目錄。

然後執行程序:

java -cp classes a.b.c.Hello 

您可以選擇將地方需要的jar在lib

這工作非常細的小程序(< 10 SRC文件和2 - 3罐子庫)。如果它生長除此之外,你很可能使用的IDE或螞蟻

約以下這個項目結構的好處是,一些IDES(如IntellJ想法)只是接他們很容易,當你創建一個新項目。您選擇「從現有來源創建項目」,然後您可以從那裏繼續。

我喜歡在命令行編譯和編輯!

+0

這非常有幫助!謝謝! – user431336 2010-08-26 15:53:18

0

爲了擴展BalusC的觀點:類路徑定義了一個「根」。當Java是找你的類,它將開始在類路徑中每一根(或jar),向下鑽取通過目錄相匹配的包strucutre。您仍然需要讓您在與其軟件包名稱匹配的目錄結構中進行授課。在你的情況下,執行

java命令。\ A \目標abcHello

則可以將文件移動到

。\ A \目標\ A \ B \ C \ Hello.class

幾年前,我也發現這個莫名其妙。

+0

現在明白了...謝謝! – user431336 2010-08-26 15:50:48