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。
推薦閱讀:
- 詳解eclipse項目中的.classpath文件原理
- eclipse怎麼導入項目 eclipse導入項目的方法
- 關於Java錯誤提示之找不到或無法加載主類的問題及正確處理方法
- IDEA將Maven項目中指定文件夾下的xml等文件編譯進classes的方法
- SpringBoot測試時卡在Resolving Maven dependencies的問題