Maven 的配置文件路径读取方法
在使用XML的配置方式来构建Mybatis的核心类SqlSessionFactory时,遇到了配置文件路径总是写不对的问题。事后看其实就是没有好好看文档,一直在盲人摸象。
下面时读取XML配置文件的代码:
varinputSteam=Resources.getResourceAsStream("config/mybatis.xml"); varsqlSessionFactory=newSqlSessionFactoryBuilder().build(inputSteam);
一开始我是将配置文件放在src/main/java/com/imxfly/config/mybatis.xml中,然后读取路径写成:com/imxfly/config/mybatis.xml,但是提示java.io.IOException:Couldnotfindresourcecom/imxfly/config/mybatis.xml。
所以关键是这里的配置文件路径如何填写,我们知道读取的路径并不是按照当前开发时候的目录结构来的,而是编译后在项目target目录下以classes目录为classpath(即类的根目录)去读取的。
假设我们把配置文件放在src/main/java/com/imxfly/config目录下,那么使用mavencompile编译后去查看target目录你会发现找不到这个配置文件,这是因为Maven编译的时候默认只读取src/main/java目录下的.java文件然后编译成.class文件,所以你在target目录下是找不到我们的配置文件的,怎么解决呢?
推荐的做法是把这些XML配置文件放在src/main/resources目录下。
在官方文档(点击查看)中清楚的描述了这一行为,其中有一句话:
Withinartifactproducingsourcedirectories(ie.mainandtest),thereisonedirectoryforthelanguagejava(underwhichthenormalpackagehierarchyexists),andoneforresources(thestructurewhichiscopiedtothetargetclasspathgiventhedefaultresourcedefinition).
对于resources目录,其目录结构会完整的直接拷贝到targetclasspath中,假如我们有如下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
所以我们在代码中读取配置文件的路径就是:
varinputSteam=Resources.getResourceAsStream("config/mybatis.xml");
因为默认情况下,Maven会在src/main/resources去寻找项目的资源文件。
但是如果我们的项目结构不好修改,配置文件就在src/main/java/com/imxfly/config/mybatis.xml怎么办?
此时我们就需要在Maven配置文件pom.xml中去告诉Maven我们的资源文件放在了哪里:
... ... ...... src/main/java/com/imxfly/config src/main/java/com/imxfly/config2 src/main/java/com/imxfly/config3
编译时Maven就会把这些目录下的文件结构完整的拷贝到target目录下(就像上面完整拷贝resources目录一样),所以此时我们的读取路径为:
varinputSteam=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配置文件路径读取内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!