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文件,测试也正常。

分类: 常见报错