最近小编在搭建 Mybatis 项目时遇到了一问题,在一切配置妥当后,开始运行测试代码,但是此时控制台无情的抛出了异常:
咦?难道是我哪里写错,我的第一反应是我的 xml 配置文件哪里写错了,我开始检查下面几个点:
检查完成后,我发现都没有问题,那就奇怪了,这问题到底出在哪了呢?此时我看来一下编译后的目标文件夹中,发现我的 mapper 配置文件并没有被编译进去。
原来在典型的 maven 工程中,目录结构有: src/main/java 和 src/main/resources ,前者是用来存放 java 源代码的,后者则是存放一些资源文件,比如配置文件等,在默认的情况下 maven 打包的时候,对于 src/main/java 目录只打包源代码,而不会打包其他文件。所以此时如果把对应的 mapper 文件放到 src/main/java 目录下时,不会打包到最终的 jar 文件夹中,也不会输出到 target 文件夹中,由于在进行单元测试的时候执行的是 /target 目录下 /test-classes 下的代码,所以在测试的时候也不会成功。
为了实现在 maven 默认环境下打包时,Mybatis 的接口和 mapper 文件在同一包中,可以通过将接口文件放在 src/main/java 某个包中,而在 src/main/resources 目录中建立同样的包,这是一种约定优于配置的方式,这样在 maven 打包的时候就会将 src/main/java 和 src/main/resources 相同包下的文件合并到同一包中。
我们需要在 Maven 项目的 pom.xml 文件中配置下列代码:
- <build>
- <resources>
- <resource>
- <directory>src/main/java</directory>
- <includes>
- <include>**/*.xml</include>
- </includes>
- <filtering>false</filtering>
- </resource>
- </resources>
- </build>
-
采用上述方法中任意一个,然后重新运行测试代码,BindingException 异常的问题就解决了。