SpringBoot中的classpath


一句話總結:classpath 等價於 main/java + main/resources + 第三方jar包的根目錄。下面詳細解釋。

首先,classpath顧名思義,是編譯之后項目的路徑,而不是對源程序的路徑描述。但是它與源程序的一些路徑是相互對應的,存在映射關系。

需要介紹一下package打包、build 之間的關系及特點:

  1. ​ 不管是build還是package,都不會把項目中使用的第三方jar包也一起打進去。

  2. build生成了如下的目錄:
    在這里插入圖片描述

    由圖可以看出,build將項目進行編譯,main/java下的源程序、resource下的靜態資源一起打包到了target/classes目錄。而package也差不多:

在這里插入圖片描述
這里的target/classes和jar包根路徑 都屬於所謂的 classpath,也就是根路徑。

  1. 打包和構建都會在根路徑下創建META-INF文件夾,如果在resource文件夾中再創建一個META-INF文件夾,並在該文件夾中建立其他的靜態資源,這些自己創建的靜態資源在打包或構建時也會一起打包到classpath:/META-INF文件夾下。

  2. 知道了這一特性之后就可以解釋項目中對webjars下的靜態資源引用的問題了。以jQuery為例:webjars官方將jQuery.js文件放到resources/META-INF/resources/webjars/中,然后將項目打包並發布,就有了我們需要的jar包。我們回憶一下如果要引用一般的jar包內的類需要怎么操作呢?import ort.xxx.xxx,這里的 “org.xxx ” 其實就是"classpath:/org.xxx.xxx";這個jQuery的jar包是一樣的道理:

    在這里插入圖片描述

    要引用jquery,只需要引用META-INF/resources/xxx,這句話的其實就是在說classpath:/META-INF/ resouces/…因此我們還可以了解到,實際上所有External Libraries中的jar包也屬於classpath根路徑。當SpringBoot檢索資源時,“/”就代表了從根路徑搜索,而搜索的范圍包括:main/java、main/resources、第三方jar包的根目錄。


免責聲明!

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



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