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. public static void 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目錄作爲基準目錄。這兩者相差了一級目錄,如果理解的不好,可能會導致錯誤。希望大家注意!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章