2010-01-29 142 views
1

如何編譯和運行以下程序:編譯並運行該java程序

Test1.java:

package A; 

public class Test1 
{ 
    public int a = 1; 
} 

Test2.java:

package B; 

import A.*; 

public class Test2 
{ 
    public static void main(String [] args) 
    { 
     Test1 obj = new Test1(); 
     System.out.println(obj.a); 
    } 
} 

我是新來的包。 如果我編譯使用javac *.java 並手動創建目錄A,將Test1.class複製到它並手動創建目錄B並將Test2.class複製到它,然後運行java B.Test2它的工作原理。我相信這不是正確的做法。請建議。

+0

一些人建議使用IDE,但我試圖弄清楚在底層發生了什麼。有人提到Ant/Maven。有什麼不同?我知道如何製作作品。我想這些都是相似的。我應該從哪一個開始,Ant還是Maven? – gameover 2010-01-29 03:36:18

回答

2

你需要保持你的java文件在正確的目錄結構:

A/Test1.java 
B/Test2.java 

這是通常足以只在主類中調用javac,因爲所有的依賴將被自動處理。我說javac B/Test2.java後,它看起來像這樣:

A/Test1.class 
A/Test1.java 
B/Test2.class 
B/Test2.java 

而且我可以java B.Test2運行程序。

如果僅僅在主類上運行javac還不夠,那麼您可能需要構建系統。

+0

+1感謝您的明確插圖:) – gameover 2010-01-29 03:34:45

2

你應該讓你的.java文件目錄結構符合包結構

所以Test1.java應該在目錄中的 所以Test2.java應在目錄中乙

+0

感謝對象,它工作:)但現在我需要使用兩次的javac!有沒有辦法發佈一個單一的javac命令? – gameover 2010-01-29 03:17:52

+1

一旦你開始創建> 1類的應用,你最好使用類似ant或maven的東西來編譯。 你也可以列出許多文件來編譯,例如。 java A/*。java B/*。java 或者你可以編譯Test2.java和Test1將被編譯(如果還沒有的話),因爲它被Test2使用 – objects 2010-01-29 03:25:00

+0

「你最好使用類似ant或maven的東西做你的編譯「。或者像Eclipse或Netbeans這樣的IDE。他們也使編碼本身更容易。 – Thilo 2010-01-29 03:27:03

0

編譯器將創建目錄去稱爲A和B並將.class文件放在它們中。

您不應該需要手動將類文件複製到它們的軟件包目錄中,如果您這樣做,它可能不起作用。

2

編譯方式沒有問題,只是很麻煩,但肯定沒有錯。

也就是說,創建一個src目錄來存儲您的.java文件,使您的目錄結構與您的類的包結構保持一致。在這種情況下,你將有src目錄和裏面,目錄A和B.目錄裏面放Test1.java和B裏面放Test2.java

然後:

javac B/Test2.java 

爲什麼Test2.java?因爲它依賴於A,所以編譯器足夠聰明,可以首先編譯A/Test1.java,然後編譯B/Test2.java。此時你有一個內部的每一個.class文件和B

運行它

java B.Test2 
+0

+1感謝您的清晰插圖:) – gameover 2010-01-29 03:35:06

0

這不是直接回答你的問題,但你可能要開始考慮使用一個IDE(別人建議螞蟻)。如果你剛剛起步,我會推薦jcreator,如果你想要一些好的東西,我會推薦Eclipse。