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文件

引用[https://blog.csdn.net/yin138/article/details/79181228 ]



猜你喜欢

转载自www.cnblogs.com/Im-Victor/p/11004650.html
今日推荐