欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Gradle或Maven打包项目资源文件问题

程序员文章站 2024-02-02 22:55:28
...

出现这个问题一不小心容易弄得人,心力交瘁,当我们用Gradle或者Maven构建web项目的时候,少不了要打包*.xml或者*.properties文件,但是默认的情况下,gradle和maven总会很智能的不去加载这么些资源,于是乎当你采用如下形式放置文件打包并运行web项目的时候

Gradle或Maven打包项目资源文件问题

会出现如下的错误,mapper文件绑定失败

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.demo.mapper.UserMapper.insert
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:196)
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:44)
	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
	at com.sun.proxy.$Proxy18.insert(Unknown Source)
	at com.demo.service.impl.UserServiceImpl.insertUser(UserServiceImpl.java:72)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)

这时候你也许会像我一样,对自己的mapper.xml文件找了又找却还是找不到丝毫的错误,其实上面错误的意思是,java文件和mapper.xml文件绑定失败,不出意料的话,在你build目录下打包生成的war包或者打包文件一定是少了这个mapper.xml文件,下面给出Gradle和Maven构建工程打包资源文件的方法

一、Gradle构建工程

将如下语句加入到build.gradle文件当中

#from文件夹目录下的所有xml文件打包进工程
processResources {
    from('src/main/java') {
        include '**/*.xml'
    }
}

这个语句是万能的,少了什么加什么

二、Maven构建工程

把如下内容加入到pom.xml文件中的build标签内

<resources>  
            <resource>  
                <directory>src/main/java</directory>  
                <includes>  
                    <include>**/*.properties</include>  
                    <include>**/*.xml</include>  
                </includes>  
                <!-- 是否替换资源中的属性-->  
                <filtering>false</filtering>  
            </resource>  
            <resource>  
                <directory>src/main/resources</directory>  
                <!--  
                    <includes> <include>**/*.properties</include>  
                    <include>**/*.xml</include> </includes> <filtering>true</filtering>  
                -->  
            </resource>  
</resources> 

以上两种酒可以解决少资源文件的问题了,同样的还有第三种在xml种配置指定资源路径目录的方式,下次碰到在补上!下面补上java文件和xml文件分开放置的指定路径的配置方式。

三、到xml文件中指定路径

1)使用spring的情况下,首先看图

Gradle或Maven打包项目资源文件问题

先把文件按照如下的位置放置,然后在spring配置文件中加入如下代码

<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />

        <!--配置包的扫描路径-->
        <property name="mapperLocations" value="classpath:com/demo/mapper/*.xml"/>
    </bean>

2)不使用spring的情况下

<beans xmlns="http://www.springframework.org/schema/beans"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"  
  xsi:schemaLocation="  
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">  
  <!-- 配置接口存储的包,用来扫描mapper接口 -->  
  <mybatis:scan base-package="edu.zju.bme.data.manage.mapper" />  
  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    <!-- 配置mapper文件位置,扫描映射文件,可以使用Ant风格的路径格式 -->  
    <property name="mapperLocations" value="classpath*:mappers/**/*.xml" />  
    // ...  
  </bean>  
</beans>