maven项目编译漏掉src/main/java下的xml配置文件
在整合Spring + Mybatis框架的時(shí)候,自動(dòng)掃描配置都已經(jīng)配置好了。
配置如下:
但是在install的時(shí)候報(bào)了如下錯(cuò)誤:
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)顯示綁定錯(cuò)誤,分析可知應(yīng)該是在UserMapper接口和SQL的隱射文件沒有結(jié)合。
第一時(shí)間檢查了mapper的namespace屬性,確認(rèn)沒有錯(cuò)。
后來查看了target/classes/../mapping并不存在,也就是說mapper.xml文件并沒有在編譯的時(shí)候放進(jìn)classes中。
那么接口當(dāng)然綁定不了selectByUserId這個(gè)方法。
查資料得知,有兩個(gè)解決辦法:
1.在pom.xml中添加如下代碼:
添加完成后,install仍然報(bào)錯(cuò),查看classes文件,xml文件已經(jīng)存在,但是卻出現(xiàn)了其他問題,jdbc驅(qū)動(dòng)找不到了,唉,無力。
解決不了心里很不舒服啊,花了一下午,終于解決了,將上面的文件修改為:
意思是maven在編譯的時(shí)候class文件夾下包含src/main/resources下的文件與src/main/java下的*.properties文件。
上面一個(gè)直接指定,會(huì)加載不了。
這樣處理讓我感覺有點(diǎn)別扭。
2.將mapper.xml映射文件放到resources文件夾下。
文件目錄如下:
運(yùn)行就不會(huì)報(bào)錯(cuò)了,但是我看著還是有點(diǎn)別扭,就是看著不爽,等以后想到好辦法之后再換吧。
我就納了個(gè)悶了,maven這樣限制xml文件的位置,即沒讓我覺得美觀,也沒有感到實(shí)用。
轉(zhuǎn)載于:https://blog.51cto.com/zhanghuiyuan/1937067
總結(jié)
以上是生活随笔為你收集整理的maven项目编译漏掉src/main/java下的xml配置文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何禁止用户名,密码自动填充
- 下一篇: scrapy-splash抓取动态数据例