Maven 的配置檔案路徑讀取方法
在使用 XML 的配置方式來構建 Mybatis 的核心類 SqlSessionFactory 時,遇到了配置檔案路徑總是寫不對的問題。事後看其實就是沒有好好看文件,一直在盲人摸象。
下面時讀取 XML 配置檔案的程式碼:
var inputSteam = Resources.getResourceAsStream("config/mybatis.xml"); var sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputSteam);
一開始我是將配置檔案放在 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。
所以關鍵是這裡的配置檔案路徑如何填寫,我們知道讀取的路徑並不是按照當前開發時候的目錄結構來的,而是編譯後在專案 target 目錄下以 classes 目錄為 classpath(即類的根目錄)去讀取的。
假設我們把配置檔案放在 src/main/java/com/imxfly/config 目錄下,那麼使用 maven compile 編譯後去檢視 target 目錄你會發現找不到這個配置檔案,這是因為 Maven 編譯的時候預設只讀取 src/main/java 目錄下的 .java 檔案然後編譯成 .class 檔案,所以你在 target 目錄下是找不到我們的配置檔案的,怎麼解決呢?
推薦的做法是把這些 XML 配置檔案放在 src/main/resources 目錄下。
在官方文件(點選檢視)中清楚的描述了這一行為,其中有一句話:
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).
對於 resources 目錄,其目錄結構會完整的直接拷貝到 target classpath 中,假如我們有如下 src 的目錄結構:
. ├── main │ ├── java │ │ └── com │ │ └── imxfly │ │ └── App.java │ └── resources │ └── config │ └── mybatis.xml └── test └── java └── com └── imxfly └── AppTest.java
那麼編譯完後的 target 目錄結構就是:
. ├── classes ├── com │ └── imxfly │ └── App.class └── config └── mybatis.xml
所以我們在程式碼中讀取配置檔案的路徑就是:
var inputSteam = Resources.getResourceAsStream("config/mybatis.xml");
因為預設情況下,Maven 會在 src/main/resources 去尋找專案的資原始檔。
但是如果我們的專案結構不好修改,配置檔案就在 src/main/java/com/imxfly/config/mybatis.xml 怎麼辦?
此時我們就需要在 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>
編譯時 Maven 就會把這些目錄下的檔案結構完整的拷貝到 target 目錄下(就像上面完整拷貝 resources 目錄一樣),所以此時我們的讀取路徑為:
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
到此這篇關於Maven 的配置檔案路徑讀取方法的文章就介紹到這了,更多相關Maven 配置檔案路徑讀取內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!