java項(xiàng)目中classpath指向哪里


今天在項(xiàng)目里看到好多地方都用到了classpath,并且自己對(duì)calsspath到底指向哪里還不是很清楚,所以就在網(wǎng)上百度了一下!

上面圖片的意思簡(jiǎn)單來(lái)說(shuō),就是classpath只能表示lib目錄和WEB-inf/classes路徑下的文件,calsspath不能表示的src路徑下面的文件,

但是從項(xiàng)目結(jié)構(gòu)來(lái)看,配置文件一般是不放在放在WEB-INF下面啊,并且也沒(méi)有看到classes路徑,lib目錄不是放依賴jar包的嗎。此時(shí)感覺(jué)涼涼了。并且測(cè)試了一下,在WEB-INF路徑下面創(chuàng)建了lib和classes文件夾,


測(cè)試的結(jié)果也很明顯,訪問(wèn)不到WEB-INF下面的classes和lib路徑下面的文件,報(bào)錯(cuò)了。
但是,我有一想,不對(duì)啊,明明項(xiàng)目中能用classpath引入配置文件,那到底是怎么引入的呢?
從第一張圖和第二張圖,使用classpath訪問(wèn)到了src路徑下面的main/resources文件中的配置文件
打開(kāi)編譯后的項(xiàng)目,發(fā)現(xiàn)項(xiàng)目文件中有一個(gè)文件名為.classpath的文件,點(diǎn)開(kāi)看了一下


具體classpath文件的介紹可以參考下面博客
.classpath文件用于記錄項(xiàng)目編譯環(huán)境的所有信息,包括:源文件路徑、編譯后class文件存放路徑、依賴的jar包路徑、運(yùn)行的容器信息、依賴的外部project等信息。如果把該文件刪除,則eclipse不能講該工程識(shí)別為一個(gè)正常的java工程,僅僅當(dāng)做普通的文件夾而導(dǎo)致不能正常運(yùn)行。
- 源文件的具體位置(kind=”src”)
- 運(yùn)行的系統(tǒng)環(huán)境(kind=”con”)
- 工程的library的具體位置信息(kind=”lib”)
- 在每個(gè)lib的xml子節(jié)點(diǎn)中,有關(guān)于它的其它配置信息(例如我配置的那個(gè)”javadoc_location”)
- 項(xiàng)目的輸出目錄(kind=”output”)
總體上說(shuō)這個(gè)文件就是配置整個(gè)工程的運(yùn)行環(huán)境。
這就很明白了,classpath值得就是(kind=”src”)所指定的文件,并且此時(shí)的可以看到(kind=”src”)的設(shè)置并沒(méi)有包含WEB-INF文件。此時(shí)我們要驗(yàn)證WEB-INF文件被classpath訪問(wèn)跟這個(gè)設(shè)置有關(guān)嗎。
首先我們將applicationContext.xml文件放在WEB-INF路徑下面,并且.classpath文件內(nèi)容如下圖,啟動(dòng)本項(xiàng)目



打開(kāi)項(xiàng)目的原始文件,發(fā)現(xiàn)applicationContext.xml并沒(méi)有出現(xiàn)

此時(shí)我們將.classpath文件中添加
classpathentry kind=”src” path=”WebContent/WEB-INF”/

再次啟動(dòng)本項(xiàng)目

打開(kāi)項(xiàng)目的原始路徑下,發(fā)現(xiàn)applicationcontext.xml出現(xiàn)在了WebContent/WEB-INF下面

由此可以總結(jié):
- 1、在編譯時(shí)生成的文件.classpath 中kind=”src” 的類型為classpath 路徑,在項(xiàng)目里可以用classpath:xxx方式引用。也可以手動(dòng)過(guò)來(lái)自己添加、擴(kuò)大classpath的范圍,也就是說(shuō)你想知道classpath可以引用哪里的文件,點(diǎn)開(kāi).classpath 看看kind=”src” 的就知道了
- 2、在編譯生成的項(xiàng)目下的bulid/classes/ 下具有的文件都是classpath 路徑下的文件,都可以通過(guò)classpath:方法獲取。(classes:指的是編譯后的文件)
- 3、”src不是classpath, WEB-INF/classes,lib才是classpath”這句話也會(huì)不對(duì)的,這是編寫項(xiàng)目時(shí)看到的,真正的classpath是在編譯后文件存放路徑,默認(rèn)是的bulid/classes/ (如結(jié)論2)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring解決循環(huán)依賴問(wèn)題及三級(jí)緩存的作用
這篇文章主要介紹了Spring解決循環(huán)依賴問(wèn)題及三級(jí)緩存的作用,所謂的三級(jí)緩存只是三個(gè)可以當(dāng)作是全局變量的Map,Spring的源碼中大量使用了這種先將數(shù)據(jù)放入容器中等使用結(jié)束再銷毀的代碼風(fēng)格2022-07-07
在 Spring Boot 中集成 MinIO 對(duì)象存儲(chǔ)
MinIO 是一個(gè)開(kāi)源的對(duì)象存儲(chǔ)服務(wù)器,專注于高性能、分布式和兼容S3 API的存儲(chǔ)解決方案,本文將介紹如何在 Spring Boot 應(yīng)用程序中集成 MinIO,以便您可以輕松地將對(duì)象存儲(chǔ)集成到您的應(yīng)用中,需要的朋友可以參考下2023-09-09
java多線程join()方法的作用和實(shí)現(xiàn)原理解析(應(yīng)用場(chǎng)景)
join方法主要是用于將當(dāng)前線程掛起,等待其他線程結(jié)束后在執(zhí)行當(dāng)前線程,本文通過(guò)應(yīng)用場(chǎng)景分析代碼示例講解java多線程join()方法的作用和實(shí)現(xiàn)原理,感興趣的朋友一起看看吧2021-07-07
Quarkus的Spring擴(kuò)展快速改造Spring項(xiàng)目
這篇文章主要為大家介紹了Quarkus的Spring項(xiàng)目擴(kuò)展,帶大家快速改造Spring項(xiàng)目示例演繹,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
java 中數(shù)據(jù)庫(kù)連接的JDBC和驅(qū)動(dòng)程序的深入分析
這篇文章主要介紹了java 中數(shù)據(jù)庫(kù)連接的JDBC和驅(qū)動(dòng)程序的深入分析的相關(guān)資料,需要的朋友可以參考下2017-04-04
Java監(jiān)聽(tīng)器三種實(shí)現(xiàn)方法代碼解析
這篇文章主要介紹了Java監(jiān)聽(tīng)器三種實(shí)現(xiàn)方法代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
JSON.parseObject和JSON.toJSONString實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了JSON.parseObject和JSON.toJSONString實(shí)例,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2018-06-06
eclipse老是自動(dòng)跳到console解決辦法
eclipse啟動(dòng)服務(wù)后,想看一些properties信息或者別的,但老是自動(dòng)跳轉(zhuǎn)到console頁(yè)面,本文給大家介紹了解決辦法,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03

