Gradle+bootJar打包SpringBoot工程并分离jar包和配置文件

使用Gradle+bootJar打包和分离lib包和配置文件

在项目的根目录下的build.gradle文件中添加如下代码:

// 将依赖包复制到lib目录
task copyJar(type: Copy) {
    // 清除现有的lib目录
    delete "$buildDir\\libs\\lib"
    from configurations.compileClasspath
    into "$buildDir\\libs\\lib"
}

// 拷贝配置文件
task copyConfigFile(type: Copy) {
    // 清除现有的配置目录
    delete "$buildDir\\libs\\config"
    from('src/main/resources')
    into 'build/libs/config'
}

// 配置bootJar进行打包
bootJar {
	// jar包名称,默认是settings.gradle下的工程名 rootProject.name = 'alog-server'
    baseName = 'alog-server'
    // jar包版本号
    version =  '0.0.1'
    // 排除所有的jar
    excludes = ["*.jar"]
    // lib目录的清除和复制任务
    dependsOn copyJar
    // 配置目录的清除和复制任务
    dependsOn copyConfigFile

    // 指定依赖包的路径
    manifest {
        attributes "Manifest-Version": 1.0,
                'Class-Path': configurations.compileClasspath.files.collect { "lib/$it.name" }.join(' ')
    }
}

执行bootJar任务

在这里插入图片描述

分析打包结果

  1. 查看在工程根目录下的build目录下。
    在这里插入图片描述

  2. 查看jar包,大小只有183KB,以后替换上传到服务器端的时候会很方便。
    在这里插入图片描述

  3. 查看配置文件config目录,程序默认先加载config下的配置,再加载jar包内的配置,所以可以在外部动态修改配置。
    在这里插入图片描述
    Spring boot 启动会扫描以下位置的application.properties或者application.yml文件
    file:./config/ (jar包当前目录下的config目录)
    file:./ ( jar包当前目录)
    classpath:/config/ ( 类文件下的config目录)
    classpath:/ ( 类文件下目录)

  4. 查看lib目录
    在这里插入图片描述

补充

补充一、下面有留言说“baseName和version属性过期了,有替代方法吗”,答案是有的。
在IDEA里按住ctrl+左键点击baseName查看bootJar的源码,如下:

// 弃用注解
@Deprecated
public void setBaseName(@Nullable String baseName) {
    this.archiveBaseName.set(baseName);
}

这里调用的是this.archiveBaseName.set(baseName);方法,所以替代方法就是archiveBaseName,所以上面的脚本可以优化一下如下:

// 将依赖包复制到lib目录
task copyJar(type: Copy) {
    // 清除现有的lib目录
    delete "$buildDir\\libs\\lib"
    from configurations.compileClasspath
    into "$buildDir\\libs\\lib"
}

// 拷贝配置文件
task copyConfigFile(type: Copy) {
    // 清除现有的配置目录
    delete "$buildDir\\libs\\config"
    from('src/main/resources')
    into 'build/libs/config'
}

// 配置bootJar进行打包
bootJar {
	// jar包名称,默认是settings.gradle下的工程名 rootProject.name = 'alog-server'
    archiveBaseName = 'alog-server'
    // jar包版本号
    archiveVersion = '0.0.1'
    // 排除所有的jar
    excludes = ["*.jar"]
    // lib目录的清除和复制任务
    dependsOn copyJar
    // 配置目录的清除和复制任务
    dependsOn copyConfigFile

    // 指定依赖包的路径
    manifest {
        attributes "Manifest-Version": 1.0,
                'Class-Path': configurations.compileClasspath.files.collect { "lib/$it.name" }.join(' ')
    }
}

补充二 Phil01留言说copy jar包少的问题,我试了好像都可以,不过copy多一点肯定不会出问题,这里更改一下copy jar包的方法。
在这里插入图片描述

// 将依赖包复制到lib目录
task copyJar(type: Copy) {
    // 清除现有的lib目录
    delete "$buildDir\\libs\\lib"
    from configurations.runtime
    into "$buildDir\\libs\\lib"
    from configurations.compileClasspath
    into "$buildDir\\libs\\lib"
}

// 拷贝配置文件
task copyConfigFile(type: Copy) {
    // 清除现有的配置目录
    delete "$buildDir\\libs\\config"
    from('src/main/resources')
    into 'build/libs/config'
}

// 配置bootJar进行打包
bootJar {
	// jar包名称,默认是settings.gradle下的工程名 rootProject.name = 'alog-server'
    archiveBaseName = 'alog-server'
    // jar包版本号
    archiveVersion = '0.0.1'
    // 排除所有的jar
    excludes = ["*.jar"]
    // lib目录的清除和复制任务
    dependsOn copyJar
    // 配置目录的清除和复制任务
    dependsOn copyConfigFile

    // 指定依赖包的路径
    manifest {
        attributes "Manifest-Version": 1.0,
                'Class-Path': configurations.compileClasspath.files.collect { "lib/$it.name" }.join(' ')
    }
}
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ruiurrui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值