Eclipse 工作路徑詳解


eclipse是非常常用的開發平台,利用eclipse的插件平台,可以將eclipse擴展成為非常優秀的專有語言ide,這里主要提到一個關於eclipse利用jdt插件開發java應用時遇到的問題。

首先我們說明一下elipse對工程的管理。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目錄下創建一個類,就叫做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路徑)(編譯的class文件會被復制到bin目錄下)

那么我們就可以理解來,在classpath的根路徑中並不存在這個test.txt文件,用相對路徑描述,這個文件實際存在於 src/test.txt和bin/test.txt。那么這個時候就有疑問了,如果我們打包發布工程,是不是jar包中就會有bin這個目錄呢?幸運的 是,eclipse考慮好了這個問題。通過eclipse的導出jar能力,bin目錄會作為jar的根目錄,而不是bin的上層的工程目錄,這樣類的包 路徑就是正確的,同時,工程目錄下的資源文件、配置文件等也被拷貝到這里,也就是相當於把工程目錄下的這些文件拷貝到來bin目錄后再打包,這樣文件的相 對路徑也就符合默認的classpath了。

eclipse實際是提供來一種策略來實現源代碼文件和配置\資源文件的單獨管理能力,利用classpath兜了個圈子,這種做法有些晦澀,但是不失為軟件工程的一個啟發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM