0.前言
调试IDEA+maven+mybatis时遇到的一个奇葩错误,
java.io.IOException: Could not find resources mybaits-config.xml
这个错误的意思是没有读取到mybatis配置文件。按照这个报错去百度了一堆答案都没有正常解决。最终在大神的提醒下发现了问题所在,记录下来解决方法,以共参考。
出错的代码:
public void test() throws IOException{ //获得核心配置文件 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); //获得session工厂对象 SqlSessionFactoryBuilder builder =new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(in); SqlSession session =factory.openSession(); //获得会话对象 List<Students> students =session.selectList("listAllStudents"); System.out.println(students); //正常输出 session.close(); //关闭 }
文件位置:
在此之前已经尝试过使用路径直接锁定mybatis-config.xml文件的位置发现不行。
1.解决办法
按照百度给的一些答案,整理一下,主要报错是意思是”没有找到xml配置文件“
有个比较直观的方法看是否可用,就是看target文件夹下classes有没有生成配置文件,如果有标识能够读取,如果没有表示不能读取。下面任何一种方法如果不能在target中 生成我们的配置文件,基本可用判断读取文件失败。
另外,每种办法试过以后都建议使用 clean、build指令,甚至重启IDEA(我最后改的就是重启后才好用的)
注:已经尝试过直接将mybatis-config.xml文件复制到classes文件夹下直接运行测试程序,这个发现是正常的(前提是你的数据库配置都正确),说明还是配置的一些问题导致没有正常生成mybatis-config.xml文件。
解决方法一:没有正确设置资源文件夹导致没有读取成功。IDEA不会去读取任意文件夹里面是配置文件,你必须告诉它配置文件在哪。本文的配置文件在src/main/resources里面的,这种情况是你没有正确配置资源目录导致不识别的,解决方法比较简单。右击resources文件夹,选择”标记目录“,选择标记为”资源跟“(如果是资源根就不能标记)。然后执行clean、build(右上角的小锤子或ctrl+F9)。最后执行test测试看下是否正常。
注:次方法对我没有作用
解决办法二:修改pom文件。我们可用在pom文件中指定资源目录,在pom文件中添加如下代码:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
然后重新clean、build,甚至是重新启动IDEA,看是否正常。
注:此方法对我也没有用。
解决方法三:在我百思不得其解的情况下,在大神的提示下,终于找到了问题所在。问题还是出在pom文件中。
在创建子模块的时候引入了这个坐标,但是这个测试程序就一个模块,测试文件也就一个,而且后来我把子模块删了,留了一个在这,外部如果这样的话表示不会在外部生成东西。所以有两个办法,一个是改成
<packaging>jar</packaging>
一个是直接删除掉这一行。
果然,删除掉这一行,重启IDEA,clean,build后,然后就发现target下面的classes下面果然出现了mybatis-config.xml文件,测试也正常。