1. 程式人生 > 實用技巧 >詳解Spring專案中的classpath路徑

詳解Spring專案中的classpath路徑

在java專案中,你一定碰到過classpath,通常情況下,我們是用它來指定配置/資原始檔的路徑。在剛開始學習的時候,自己也糊里糊塗,但是現在,是時候弄清楚它到底是指什麼了。

顧名思義,classpath就是class的path,也就是類檔案(*.class的路徑)。一談到檔案的路徑,我們就很有必要了解一個java專案(通常也是web專案)它在真正執行時候,這個專案內部的目錄、檔案的結構;這樣,我們才好分析、理解classpath。

開發時期的web專案結構

下面,我以一個ssm的專案為例,我先把開發時候的專案的目錄結構圖放出來。根據maven的約定,一般我們的專案結構就像下面這樣。

clipboard.png

對於一個編譯過的Spring工程,會生成一個target資料夾,該資料夾下有多個子資料夾:

Spring工程編譯後,會按照配置,將生成的.class檔案和各類資原始檔放到classes資料夾下。同時配置也決定了是直接放到classes根目錄,還是帶有資料夾路徑。

web專案釋出後的目錄結構

我們使用IDEA對專案進行打包,一種是war包,一種是explorer的資料夾,war包解壓後就是explorer了。我們來對解壓後的目錄結構進行分析。

clipboard.png

經過對比,我們要注意到,開發時期的專案裡,src/main/下面的javaresources資料夾都被(編譯)打包到了生產包的WEB-INF/classes/目錄下;而原來WEB-INF下面的views和web.xml則仍然還是在WEB-INF下面。同時由maven引入的依賴都被放入到了WEB-INF/lib/

下面。最後,編譯後的class檔案和資原始檔都放在了classes目錄下。

clipboard.png

classpath原來是這個

在編譯打包後的專案中,根目錄是META-INFWEB-INF。這個時候,我們可以看到classes這個資料夾,它就是我們要找的classpath。

classpath:entry/dev/spring-mvc.xml中,classpath就是指WEB-INF/classes/這個目錄的路徑。需要宣告的一點是,使用classpath:這種字首,就只能代表一個檔案

classpath*:**/mapper/mapping/*Mapper.xml,使用classpath*:這種字首,則可以代表多個匹配的檔案

**/mapper/mapping/*Mapper.xml,雙星號**表示在任意目錄下,也就是說在WEB-INF/classes/下任意層的目錄,只要符合後面的檔案路徑,都會被作為資原始檔找到。