Gradle或Maven打包项目资源文件问题
程序员文章站
2024-02-02 22:55:28
...
出现这个问题一不小心容易弄得人,心力交瘁,当我们用Gradle或者Maven构建web项目的时候,少不了要打包*.xml或者*.properties文件,但是默认的情况下,gradle和maven总会很智能的不去加载这么些资源,于是乎当你采用如下形式放置文件打包并运行web项目的时候
会出现如下的错误,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的情况下,首先看图
先把文件按照如下的位置放置,然后在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>
推荐阅读
-
Gradle或Maven打包项目资源文件问题
-
gradle项目中资源文件的相对路径打包技巧必看
-
Maven项目中的配置文件找不到以及打包问题
-
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
-
【问题解决】解决项目打包成jar包,部署上线后,读取resources目录文件资源失效。
-
Maven项目中的配置文件找不到以及打包问题
-
JAVA:解决idea中spring项目pom文件的 spring-boot-maven-plugin报红问题并打包
-
gradle项目中资源文件的相对路径打包技巧必看
-
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
-
解决使用maven将项目打包成jar包后运行在linux系统中无法读取jar包中文件的问题