在使用 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 我们的资源文件放在了哪里:

...

...

src/main/java/com/imxfly/config

src/main/java/com/imxfly/config2

src/main/java/com/imxfly/config3

...

...

编译时 Maven 就会把这些目录下的文件结构完整的拷贝到 target 目录下(就像上面完整拷贝 resources 目录一样),所以此时我们的读取路径为:

var inputSteam = Resources.getResourceAsStream("mybatis.xml");

参考资料:

maven java 配置文件路径_Maven 的配置文件路径读取相关推荐

  1. maven配置项目根路径_maven中classpath路径(转)

    前几天看见一个大神总结classpath文章,觉得特别有用.所以,特此转载(http://my.oschina.net/GivingOnenessDestiny/blog/603505) 各种path ...

  2. maven java web项目_Maven创建JavaWeb项目

    使用模板创建项目 JavaWeb项目模板使用 使用模板创建JavaWeb项目,就是上图的结构.缺少src/main/java目录,以及两个test目录.但是多了webapp目录,这个目录就等效于以前J ...

  3. java webproject中logback换配置文件的路径

    java webproject中logback换配置文件的路径 本人小站点:   http://51kxd.com/  欢迎大家不开心的时候訪问訪问,调节一下心情 web.xml中配置: <!- ...

  4. java jar 配置文件路径_java jar 配置文件的相对路径问题

    无论是在Windows还是Linux操作系统下,绝对路径和相对路径都是很重要的概念,也是许多初学者迷惑的地方,下面我们就这两个概念进行介绍. 绝对路径:由根目录'/'开始写起的文件名或者目录名称,例如 ...

  5. java log4j 路径配置_log4j配置文件中路径配置一般有三种方法:

    log4j配置文件中路径配置一般有三种方法: (1)绝对路径法:直接配置为系统觉得路径: (2)相对路径法: log4j.appender.logfile.File=../logs/app.log,将 ...

  6. java resources 目录_Maven项目中读取src/main/resources目录下的配置文件的方法

    在Maven项目的开发中,当需要读取src/下的配置文件时,该怎么做? 我们假设Resources下有一个文件名为kafka.properties的配置文件(为什么用kafka.properties, ...

  7. maven配置项目根路径_maven配置src/resources默认目录

    在maven工程中,我们会将配置文件放到,src/main/resources   下面,例如 我们需要确认resource 下的文件 编译之后存放的位置 它编译的路径直接位于classes下面,这个 ...

  8. ClassLoad类加载器读取ClassPath路径下的配置文件(一)

    ClassLoad类加载器读取ClassPath路径下的配置文件(一) 一.项目介绍 1.使用 com.test.test包下的ReadclassLoad 类去读取另一个包 com.test.util ...

  9. vs2008调试c#网页时出现“加载配置文件时出错: 未能映射路径'/' 错误 .

    win7 64位 下vs2008调试c#网页时出现"加载配置文件时出错: 未能映射路径'/' "错误 . 解决办法:右键点击vs2008快捷方式,选择属性,然后选择"兼容 ...

最新文章

  1. 解读分库分表中间件Sharding-JDBC
  2. tensorflow与numpy的版本兼容性问题(亲测)
  3. MySQL——高阶语句、存储过程(下)
  4. 软件:推荐五款超级好用的电脑小众软件,值得收藏!
  5. 如何评价一个产品经理工作做的好坏?
  6. 【人工智能】如何Finetune一个小网络到移动端(时空性能分析篇)
  7. HDU1598 并查集+枚举
  8. Algorithm:数学建模大赛(CUMCM/NPMCM)之CUMCM之2006B之2006之B题《艾滋病疗法的评价及疗效的预测》
  9. VVC之SCC(一):IBC
  10. 对于拖延症的最好方法
  11. 数据库不存在 php报错,如何实现“当名字在数据库中不存在时,转到错误页面。”?...
  12. BetterScroll 2.0网络数据过慢,不能滚动问题
  13. nginx的安装升级、常用配置(一)
  14. 盘点2019年经典营销案例
  15. 覆盖常见四大应用场景,华为云CDN能够更好满足企业业务加速需求
  16. 数字集成电路设计(五、仿真验证与 Testbench 编写)(一)
  17. Android 反编译 apktool+dex2jar+jd-gui
  18. 计算机毕业设计各种题目总结
  19. VueCli 和 Vite
  20. Sqlite 获取一小时内数据sql

热门文章

  1. 17岁成研究生,20岁被劝退,38岁“神童”离世
  2. 2021谷歌学术指标出炉:CVPR总榜第4,仅次于Science,ECCV超过ICCV......
  3. 16岁日本神童打造日版「健康码」,追踪用户行动数据抗击疫情
  4. 实战:手把手教你用朴素贝叶斯对文档进行分类
  5. 拒绝加班,办公电脑换新低至¥1999
  6. SPU表管理之查询获取SPU表列表数据
  7. JSP第二次作业_4小题
  8. 面向软件工程师的卡尔曼滤波器
  9. 实战:基于OpenCV进行长时间曝光(内含彩蛋)
  10. 遥感图像+CNN,预测区域人口收入水平