gradle复制xml等配置文件到输出目录

gradle复制xml等配置文件到输出目录

用gradle开发spring boot + mybatis项目时,我们需要把xml等配置文件复制到输出目录和jar包中,可是……有时候总会出现一些奇怪的问题……希望本文可以解决你的问题,也可以解决你的疑惑。

问题场景

项目中在src/main/java目录中放置了xml或其他配置文件,我需要把它复制到jar包中,并可以在ide中调试运行

解决方法

把文件复制到jar包中

复制文件到jar包中,可以采用如下代码(build.gradle)文件中:

apply plugin: 'java'
jar {
    from('src/main/java'){
        include '**/*.xml'
    }
}

有了上面所示的jar配置,就可以把源代码目录下面所有的*.xml复制到jar包中。
万事大吉,对不!不!事情没有那么简单!
此时查看build/libs目录下的jar包时,配置文件乖乖的在jar包中等着呢!
是的,可是,如果你想在开发环境中运行时,你会发现,如果你的程序依赖于这些*.xml文件,那么程序无法运行。
如果,你刚好和我一样,运行的是集成mybatis的程序,对不起,会出错,而且提示的bean无法实例化,为啥?其实这个时候,使用java -jar build/libs/*.jar是可以运行程序的!

上面的代码就是解决了生存jar包时xml配置文件复制的问题,可是没有解决开发环境调试的问题。

把文件复制到resources目录下

一种办法,就是把所有xml文件复制到src/main/resources目录下,如果一定要反正src/main/java目录下,还需要下面的配置脚本才可以:

sourceSets {
    main {
        resources {
            //可以将java目录下的所有非.java资源打包到classes下
            srcDir 'src/main/java' 
        }
    }
}

这样,resources目录下的文件也会复制到build/resource目录下,而且,不需要前面的jar中的from配置,jar包中也会存在配置文件。这里可以理解为jar过程是在源码复制结束后执行的(gradle的确是有这个的依赖关系的,请看这里:gradle java插件文档)。

这里需要提醒的是,如果采用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'
        }
    }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值