问题
部署项目并启动项目后,使用mybatis时候,报一个错误:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
,项目在eclipse下运行毫无问题,但在idea下回报错
原因
在网上各种搜索后发现,是idea工具在编译打包的过程中,只搬运src/main/java里面的java文件到输出目录中,项目中在src/main/java目录中放置了xml或其他配置文件则不会进行搬运,这就导致了一个找不到配置文件的存在
解决方法一:
把配置相关的文件放回到resource目录下,打包时会输出到对应的resource目录下
解决方法二:
通过配置gradle的build配置,在build.gradle
下加入配置:
sourceSets {
main {
resources {
//可以将java目录下的所有非.java资源打包到classes下
srcDir 'src/main/java'
}
}
}
以上的配置会把所有的非java的资源文件打包到resource目录下,这个配置兼容jar包的打包输出,本人渣,只是个搬运工,具体的原理可以去查看gradle的文档
单独打包jar包的时候则需要进行下面的配置
apply plugin: 'java'
jar {
from('src/main/java'){
include '**/*.xml'
}
}
如果采用srcDirs的写法,那么,请注意需要如下写,否则,你会发现本应该复制的配置文件确没有复制了:
sourceSets {
main {
resources {
//可以将java目录下的所有非.java资源打包到classes下
srcDirs = ['src/main/java', 'src/main/resources']
}
}
}
sourceSets的作用就是解决源代码目录结构的配置项,比如,配置文件的目录不是src/main/resources目录,而是src/resources目录(少了main目录),那么就需要通过上面的方法修改,替换默认的配置文件位置。当然,也可以通过如下方式修改源代码目录的位置:
sourceSets {
main {
java{
srcDir 'src/java'
}
resources {
srcDir 'src/resources'
}
}
}
备注
另外 为什么在eclipse里面 即使pom,gradle不做这个特别配置 也没问题 原因是eclipse在build工程的时候 不依赖 maven的pom,gradle文件 用的eclipse的编译机制 不会忽略源码文件夹里面的xml文件
网友评论