java項目中classpath指向哪裡

今天在項目裡看到好多地方都用到瞭classpath,並且自己對calsspath到底指向哪裡還不是很清楚,所以就在網上百度瞭一下!

上面圖片的意思簡單來說,就是classpath隻能表示lib目錄和WEB-inf/classes路徑下的文件,calsspath不能表示的src路徑下面的文件,

但是從項目結構來看,配置文件一般是不放在放在WEB-INF下面啊,並且也沒有看到classes路徑,lib目錄不是放依賴jar包的嗎。此時感覺涼涼瞭。並且測試瞭一下,在WEB-INF路徑下面創建瞭lib和classes文件夾,

測試的結果也很明顯,訪問不到WEB-INF下面的classes和lib路徑下面的文件,報錯瞭。

但是,我有一想,不對啊,明明項目中能用classpath引入配置文件,那到底是怎麼引入的呢?

從第一張圖和第二張圖,使用classpath訪問到瞭src路徑下面的main/resources文件中的配置文件

打開編譯後的項目,發現項目文件中有一個文件名為.classpath的文件,點開看瞭一下

具體classpath文件的介紹可以參考下面博客

.classpath文件詳解

.classpath文件用於記錄項目編譯環境的所有信息,包括:源文件路徑、編譯後class文件存放路徑、依賴的jar包路徑、運行的容器信息、依賴的外部project等信息。如果把該文件刪除,則eclipse不能講該工程識別為一個正常的java工程,僅僅當做普通的文件夾而導致不能正常運行。

  • 源文件的具體位置(kind=”src”)
  • 運行的系統環境(kind=”con”)
  • 工程的library的具體位置信息(kind=”lib”)
  • 在每個lib的xml子節點中,有關於它的其它配置信息(例如我配置的那個”javadoc_location”)
  • 項目的輸出目錄(kind=”output”)

總體上說這個文件就是配置整個工程的運行環境。

這就很明白瞭,classpath值得就是(kind=”src”)所指定的文件,並且此時的可以看到(kind=”src”)的設置並沒有包含WEB-INF文件。此時我們要驗證WEB-INF文件被classpath訪問跟這個設置有關嗎。

首先我們將applicationContext.xml文件放在WEB-INF路徑下面,並且.classpath文件內容如下圖,啟動本項目

打開項目的原始文件,發現applicationContext.xml並沒有出現

此時我們將.classpath文件中添加

classpathentry kind=”src” path=”WebContent/WEB-INF”/

再次啟動本項目

打開項目的原始路徑下,發現applicationcontext.xml出現在瞭WebContent/WEB-INF下面

由此可以總結:

  • 1、在編譯時生成的文件.classpath 中kind=”src” 的類型為classpath 路徑,在項目裡可以用classpath:xxx方式引用。也可以手動過來自己添加、擴大classpath的范圍,也就是說你想知道classpath可以引用哪裡的文件,點開.classpath 看看kind=”src” 的就知道瞭
  • 2、在編譯生成的項目下的bulid/classes/ 下具有的文件都是classpath 路徑下的文件,都可以通過classpath:方法獲取。(classes:指的是編譯後的文件)
  • 3、”src不是classpath, WEB-INF/classes,lib才是classpath”這句話也會不對的,這是編寫項目時看到的,真正的classpath是在編譯後文件存放路徑,默認是的bulid/classes/ (如結論2)

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: