失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > maven项目编译漏掉src/main/java下的xml配置文件

maven项目编译漏掉src/main/java下的xml配置文件

时间:2018-08-26 07:44:50

相关推荐

maven项目编译漏掉src/main/java下的xml配置文件

在整合Spring + Mybatis框架的时候,自动扫描配置都已经配置好了。

配置如下:

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context-3.1.xsd/schema/mvc/schema/mvc/spring-mvc-4.0.xsd"><!--自动扫描--><context:component-scanbase-package="com.aheizi"/><!--引入配置文件--><beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><propertyname="location"value="classpath:properties/jdbc.properties"/></bean><beanid="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><propertyname="driverClassName"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/><!--初始化连接大小--><propertyname="initialSize"value="${initialSize}"></property><!--连接池最大数量--><propertyname="maxActive"value="${maxActive}"></property><!--连接池最大空闲--><propertyname="maxIdle"value="${maxIdle}"></property><!--连接池最小空闲--><propertyname="minIdle"value="${minIdle}"></property><!--获取连接最大等待时间--><propertyname="maxWait"value="${maxWait}"></property></bean><!--spring和MyBatis完美整合,不需要mybatis的配置映射文件--><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><!--自动扫描mapping.xml文件--><propertyname="mapperLocations"value="classpath*:com/aheizi/mapping/*.xml"></property><propertyname="typeAliasesPackage"value="com.aheizi.domain"/></bean><!--DAO接口所在包名,Spring会自动查找其下的类--><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value="com.aheizi.dao"/><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property></bean><!--(事务管理)transactionmanager,useJtaTransactionManagerforglobaltx--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/></bean></beans>

但是在install的时候报了如下错误:

org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.aheizi.dao.UserMapper.selectByUserIdatorg.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:184)atorg.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38)atorg.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49)atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42)atcom.sun.proxy.$Proxy11.selectByUserId(UnknownSource)atcom.aheizi.service.impl.UserServiceImpl.getUserById(UserServiceImpl.java:20)atcom.aheizi.testmybatis.TestSpringDemo.test1(TestSpringDemo.java:37)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:601)atorg.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)atorg.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)atorg.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)atorg.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)atorg.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)atorg.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)atorg.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)atorg.springframework.test.context.junit4.SpringJUnit4Cla***unner.runChild(SpringJUnit4Cla***unner.java:231)atorg.springframework.test.context.junit4.SpringJUnit4Cla***unner.runChild(SpringJUnit4Cla***unner.java:88)atorg.junit.runners.ParentRunner$3.run(ParentRunner.java:238)atorg.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)atorg.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)atorg.junit.runners.ParentRunner.access$000(ParentRunner.java:53)atorg.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)atorg.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)atorg.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)atorg.junit.runners.ParentRunner.run(ParentRunner.java:309)atorg.springframework.test.context.junit4.SpringJUnit4Cla***unner.run(SpringJUnit4Cla***unner.java:174)atorg.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)atorg.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)atorg.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:601)atorg.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)atorg.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)atorg.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)atorg.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)atorg.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

显示绑定错误,分析可知应该是在UserMapper接口和SQL的隐射文件没有结合。

第一时间检查了mapper的namespace属性,确认没有错。

后来查看了target/classes/../mapping并不存在,也就是说mapper.xml文件并没有在编译的时候放进classes中。

那么接口当然绑定不了selectByUserId这个方法。

查资料得知,有两个解决办法:

1.在pom.xml中添加如下代码:

<resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources>

添加完成后,install仍然报错,查看classes文件,xml文件已经存在,但是却出现了其他问题,jdbc驱动找不到了,唉,无力。

解决不了心里很不舒服啊,花了一下午,终于解决了,将上面的文件修改为:

<resources><resource><directory>src/main/resources</directory></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources>

意思是maven在编译的时候class文件夹下包含src/main/resources下的文件与src/main/java下的*.properties文件。

上面一个直接指定,会加载不了。

这样处理让我感觉有点别扭。

2.将mapper.xml映射文件放到resources文件夹下。

文件目录如下:

运行就不会报错了,但是我看着还是有点别扭,就是看着不爽,等以后想到好办法之后再换吧。

我就纳了个闷了,maven这样限制xml文件的位置,即没让我觉得美观,也没有感到实用。

如果觉得《maven项目编译漏掉src/main/java下的xml配置文件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。