Maven 的配置文件路徑讀取方法
在使用 XML 的配置方式來(lái)構(gòu)建 Mybatis 的核心類 SqlSessionFactory 時(shí),遇到了配置文件路徑總是寫不對(duì)的問(wèn)題。事后看其實(shí)就是沒(méi)有好好看文檔,一直在盲人摸象。
下面時(shí)讀取 XML 配置文件的代碼:
var inputSteam = Resources.getResourceAsStream("config/mybatis.xml"); var sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputSteam);
一開(kāi)始我是將配置文件放在 src/main/java/com/imxfly/config/mybatis.xml 中,然后讀取路徑寫成:com/imxfly/config/mybatis.xml ,但是提示 java.io.IOException: Could not find resource com/imxfly/config/mybatis.xml。
所以關(guān)鍵是這里的配置文件路徑如何填寫,我們知道讀取的路徑并不是按照當(dāng)前開(kāi)發(fā)時(shí)候的目錄結(jié)構(gòu)來(lái)的,而是編譯后在項(xiàng)目 target 目錄下以 classes 目錄為 classpath(即類的根目錄)去讀取的。
假設(shè)我們把配置文件放在 src/main/java/com/imxfly/config 目錄下,那么使用 maven compile 編譯后去查看 target 目錄你會(huì)發(fā)現(xiàn)找不到這個(gè)配置文件,這是因?yàn)?Maven 編譯的時(shí)候默認(rèn)只讀取 src/main/java 目錄下的 .java 文件然后編譯成 .class 文件,所以你在 target 目錄下是找不到我們的配置文件的,怎么解決呢?
推薦的做法是把這些 XML 配置文件放在 src/main/resources 目錄下。
在官方文檔(點(diǎn)擊查看)中清楚的描述了這一行為,其中有一句話:
Within artifact producing source directories (ie. main and test), there is one directory for the language java (under which the normal package hierarchy exists), and one for resources (the structure which is copied to the target classpath given the default resource definition).
對(duì)于 resources 目錄,其目錄結(jié)構(gòu)會(huì)完整的直接拷貝到 target classpath 中,假如我們有如下 src 的目錄結(jié)構(gòu):
. ├── main │ ├── java │ │ └── com │ │ └── imxfly │ │ └── App.java │ └── resources │ └── config │ └── mybatis.xml └── test └── java └── com └── imxfly └── AppTest.java
那么編譯完后的 target 目錄結(jié)構(gòu)就是:
. ├── classes ├── com │ └── imxfly │ └── App.class └── config └── mybatis.xml
所以我們?cè)诖a中讀取配置文件的路徑就是:
var inputSteam = Resources.getResourceAsStream("config/mybatis.xml");
因?yàn)槟J(rèn)情況下,Maven 會(huì)在 src/main/resources 去尋找項(xiàng)目的資源文件。
但是如果我們的項(xiàng)目結(jié)構(gòu)不好修改,配置文件就在 src/main/java/com/imxfly/config/mybatis.xml 怎么辦?
此時(shí)我們就需要在 Maven 配置文件 pom.xml 中去告訴 Maven 我們的資源文件放在了哪里:
<project> ... <build> ... <resources> <resource> <directory>src/main/java/com/imxfly/config</directory> </resource> <resource> <directory>src/main/java/com/imxfly/config2</directory> </resource> <resource> <directory>src/main/java/com/imxfly/config3</directory> </resource> </resources> ... </build> ... </project>
編譯時(shí) Maven 就會(huì)把這些目錄下的文件結(jié)構(gòu)完整的拷貝到 target 目錄下(就像上面完整拷貝 resources 目錄一樣),所以此時(shí)我們的讀取路徑為:
var inputSteam = Resources.getResourceAsStream("mybatis.xml");
參考資料:
https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
到此這篇關(guān)于Maven 的配置文件路徑讀取方法的文章就介紹到這了,更多相關(guān)Maven 配置文件路徑讀取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- maven如何利用springboot的配置文件進(jìn)行多個(gè)環(huán)境的打包
- maven工程如何讀取resource目錄下配置文件
- IDEA設(shè)置maven修改settings.xml配置文件無(wú)法加載倉(cāng)庫(kù)的解決方案
- 詳解maven的setting配置文件中mirror和repository的區(qū)別
- 使用maven profile指定配置文件打包適用多環(huán)境的方法
- Maven項(xiàng)目中讀取src/main/resources目錄下的配置文件的方法
- Maven setting.xml配置文件詳解
- Maven在不同的環(huán)境獲取不同配置文件的方法
相關(guān)文章
淺析對(duì)Java關(guān)鍵字final和static的理解
本文主要給大家談?wù)勑【帉?duì)java關(guān)鍵字final和static的理解,本文給大家介紹的較詳細(xì),需要的朋友參考參考下2017-04-04SpringBoot的DeferredResult案例:DeferredResult的超時(shí)處理方式
這篇文章主要介紹了SpringBoot的DeferredResult案例:DeferredResult的超時(shí)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01java Date裝成英文String后,無(wú)法再轉(zhuǎn)回Date的解決方案
本文介紹了java Date裝成英文String后,無(wú)法再轉(zhuǎn)回Date的解決方案。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01Java基于swing實(shí)現(xiàn)的彈球游戲代碼
這篇文章主要介紹了Java基于swing實(shí)現(xiàn)的彈球游戲代碼,包含了窗體界面設(shè)計(jì)與游戲的邏輯功能處理,具有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11