小一寸
在使⽤ XML 的配置⽅式来构建 Mybatis 的核⼼类 SqlSessionFactory 时,遇到了配置⽂件路径总是写不对的问题。事后看其实就是没有好好看⽂档,⼀直在盲⼈摸象。
下⾯时读取 XML 配置⽂件的代码:
var inputSteam = ResourceAsStream("l");
var sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputSteam);
⼀开始我是将配置⽂件放在 src/main/java/com/imxfly/l 中,然后读取路径写成:
com/imxfly/l ,但是提⽰ java.io.IOException: Could not find resource com/imxfly/conf
l。
所以关键是这⾥的配置⽂件路径如何填写,我们知道读取的路径并不是按照当前开发时候的⽬录结构来的,⽽是编译后在项⽬ target ⽬录下以 classes ⽬录为 classpath(即类的根⽬录)去读取的。
2017年立秋假设我们把配置⽂件放在 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
│ └── l
└── test
└── java
└── com
└── imxfly
└── AppTest.java
那么编译完后的 target ⽬录结构就是:
.
读取配置文件失败├── classes
├── com
│ └── imxfly
许嵩的资料│ └── App.class
└── config
└── l
所以我们在代码中读取配置⽂件的路径就是:
var inputSteam = ResourceAsStream("l");
因为默认情况下,Maven 会在 src/main/resources 去寻项⽬的资源⽂件。
但是如果我们的项⽬结构不好修改,配置⽂件就在 src/main/java/com/imxfly/l 怎么办?
此时我们就需要在 Maven 配置⽂件 l 中去告诉 Maven 我们的资源⽂件放在了哪⾥:
...
...
src/main/java/com/imxfly/config
src/main/java/com/imxfly/config2
src/main/java/com/imxfly/config3
...
...
编译时 Maven 就会把这些⽬录下的⽂件结构完整的拷贝到 target ⽬录下(就像上⾯完整拷贝 resources ⽬录⼀样),所以此时我们的读取路径为:
var inputSteam = ResourceAsStream("l");
参考资料:
到此这篇关于Maven 的配置⽂件路径读取⽅法的⽂章就介绍到这了,更多相关Maven 配置⽂件路径读取内容请搜索云海天教程以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持云海天教程!
发布评论