gradle + mybatis 复制xml等配置文件到输出目录
问题
部署项目并启动项目后,使用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文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库