1. 程式人生 > >eclipse目錄結構功能

eclipse目錄結構功能



eclipse的基本工程目錄叫做workspace,每個執行時的eclipse例項只能對應一個workspace,也就是說,workspace是當前工作的根目錄。我們在workspace中可以隨意建立各種java相關的工程,普通的java應用,java web應用,web service應用等,我們僅拿普通的java application來說明。

通常我們建立一個java application工程,會建立一個工程目錄,假設工程名稱為:TestProject,那麼在當前的workspace裡講建立一個目錄名為TestProject,同時我們選擇src作為原始碼資料夾,bin作為輸出路徑,這樣就構成了一個基本的java application工程。,在workspace中存在如下資料夾:

+workspace
  +TestProject
    -src
    -bin

這個時候我們建立的程式碼將寫入src目錄,輸出的class檔案將存在於bin目錄。

(對於新手來說,區分src目錄和bin目錄很重要,通常情況下,src目錄只存放原始碼,而所有工程相關的其他輸出檔案都會存放在bin目錄下,最為重要的是:用Eclipse進行打包時根目錄就是bin,用jar包呼叫工程的時候預設的路徑也要以bin為準,到bin的層級數目就是最終的數目,因此可以說bin是最為重要的目錄,而不是src)


這時候我們在src目錄下建立一個類,就叫做TestClass,裡面有一個main方法如下:

Java程式碼 複製程式碼
  1. publicstaticvoid main(String[] args){   
  2.     System.out.println(new File(
    "test.txt").exist());   
  3. }

同時在src目錄下建立一個空的檔案test.txt。什麼都不要做,儲存工程,開啟資源管理器,我們來檢視workspace/TestProject/bin目錄,下面會存在兩個檔案:TestClass.class和test.txt。

此時我們設想,程式的內容就是檢查test.txt檔案是否存在,按照現在的目錄規劃,我們認為,在控制檯上將打出“true”,ok,我們回到eclipse中,執行TestClass這個類。控制檯輸出了:false!

為什麼我們得到了並非我們預期的結果呢?先彆著急,我們開啟windows的命令列介面(或者linux的shell都ok),將目錄切換到workspace/TestProject/bin目錄下,執行如下命令java TestClass,看看出現什麼結果?true!對,就是true。

為啥同樣的程式會有不同的結果呢?這個答案很簡單,就出在java.exe本身的一個引數-cp(classpath)上!

eclipse預設的classpath包括三個部分:
1、jdk的bin目錄;
2、工程引用的所有其他jar包路徑
3、工程根路徑(對,不是bin路徑)

那麼我們就可以理解來,在classpath的根路徑中並不存在這個test.txt檔案,用相對路徑描述,這個檔案實際存在於src/test.txt和bin/test.txt。也就是說,classpath預設的路徑是workspace-testproject下,而不是workspace-testproject-bin下,所以才找不到這個檔案。這是經常出現的問題!

那麼這個時候就有疑問了,如果我們打包釋出工程,是不是jar包中會把testproject根目錄作為包中的根目錄呢?幸運的是,eclipse考慮好了這個問題。通過eclipse的匯出jar能力,bin目錄會作為jar的根目錄,而不是bin的上層的工程目錄,這樣類的包路徑就是正確的,同時,工程目錄下的資原始檔、配置檔案等也被拷貝到這裡,也就是相當於把工程目錄下的這些檔案拷貝到來bin目錄後再打包,這樣檔案的相對路徑也就符合預設的classpath了。

從上面可以總結出來:Eclipse直接執行時,是以工程的根目錄作為基準目錄。而打包成jar執行時,則是以bin目錄作為基準目錄。這兩者相差了一級目錄,如果理解的不好,可能會導致錯誤。希望大家注意!