maven项目编译漏掉src/main/java下的xml配置文件
在整合Spring + Mybatis框架的时候,自动扫描配置都已经配置好了。
配置如下:
但是在install的时候报了如下错误:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.aheizi.dao.UserMapper.selectByUserIdat org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:184)at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38)at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42)at com.sun.proxy.$Proxy11.selectByUserId(Unknown Source)at com.aheizi.service.impl.UserServiceImpl.getUserById(UserServiceImpl.java:20)at com.aheizi.testmybatis.TestSpringDemo.test1(TestSpringDemo.java:37)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)at org.springframework.test.context.junit4.SpringJUnit4Cla***unner.runChild(SpringJUnit4Cla***unner.java:231)at org.springframework.test.context.junit4.SpringJUnit4Cla***unner.runChild(SpringJUnit4Cla***unner.java:88)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)at org.junit.runners.ParentRunner.run(ParentRunner.java:309)at org.springframework.test.context.junit4.SpringJUnit4Cla***unner.run(SpringJUnit4Cla***unner.java:174)at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)显示绑定错误,分析可知应该是在UserMapper接口和SQL的隐射文件没有结合。
第一时间检查了mapper的namespace属性,确认没有错。
后来查看了target/classes/../mapping并不存在,也就是说mapper.xml文件并没有在编译的时候放进classes中。
那么接口当然绑定不了selectByUserId这个方法。
查资料得知,有两个解决办法:
1.在pom.xml中添加如下代码:
添加完成后,install仍然报错,查看classes文件,xml文件已经存在,但是却出现了其他问题,jdbc驱动找不到了,唉,无力。
解决不了心里很不舒服啊,花了一下午,终于解决了,将上面的文件修改为:
意思是maven在编译的时候class文件夹下包含src/main/resources下的文件与src/main/java下的*.properties文件。
上面一个直接指定,会加载不了。
这样处理让我感觉有点别扭。
2.将mapper.xml映射文件放到resources文件夹下。
文件目录如下:
运行就不会报错了,但是我看着还是有点别扭,就是看着不爽,等以后想到好办法之后再换吧。
我就纳了个闷了,maven这样限制xml文件的位置,即没让我觉得美观,也没有感到实用。
转载于:https://blog.51cto.com/zhanghuiyuan/1937067
总结
以上是生活随笔为你收集整理的maven项目编译漏掉src/main/java下的xml配置文件的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 如何禁止用户名,密码自动填充
- 下一篇: scrapy-splash抓取动态数据例