SpringBoot项目使用Gradle打包为可执行Jar包并分离项目依赖

SpringBoot项目使用Gradle打包为可执行Jar包并分离项目依赖

Cappuccilo

前言

传统的Java应用程序我们会打包成war包,并配置tomcat来运行它。

在SpringBoot框架下,官方封装了一个bootJar的脚本以便于我们可以直接把项目打包成Jar包,并且不需要依赖外部tomcat运行。

将项目打包为Jar包并运行

在我们的项目根目录的 build.gradle文件后添加以下内容:

1
2
3
bootJar {
launchScript()
}

而后使用Gradle的 bootJar命令即可将项目打包为Jar包。

image.png

在windows下我们这样运行这个项目:

1
java -jar xxx.jar

而在Linux下可以使用软连接的方式更方便地管理Jar包:

  • 建立软链接

    1
    ln -s <jar包绝对路径> /etc/init.d/<自定义项目名称>
  • 启动服务、重启服务、查看服务状态、停止服务

    1
    service <自定义项目名称> start/restart/status/stop

实际应用中,我们需要将打包的项目上传到远程服务器运行,而Jar包文件过大会影响我们上传的效率,这时,我们可以通过打包时分离项目依赖来减小Jar包体积。

分离项目依赖

将上文build.gradle里添加的内容替换为如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 将依赖包复制到lib目录
tasks.register('copyJar', Copy) {
// 清除现有的lib目录
delete "$buildDir\\libs\\lib"
from configurations.runtimeClasspath
into "$buildDir\\libs\\lib"
}

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

// 指定依赖包的路径
manifest {
attributes "Manifest-Version": 1.0,
'Class-Path': configurations.runtimeClasspath.files.collect { "lib/$it.name" }.join(' ')
}
launchScript()
}
在老版本的Gradle中你可能需要将代码更换为如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 将依赖包复制到lib目录
task copyJar(type: Copy) {
// 清除现有的lib目录
delete "$buildDir\\libs\\lib"
from configurations.compileClasspath
into "$buildDir\\libs\\lib"
}

// 配置bootJar进行打包
bootJar {
// jar包名称,默认是settings.gradle下的工程名 rootProject.name = 'esp_front'
baseName = 'esp_front'
// 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(' ')
}
launchScript()
}

然后重新执行bootJar命令,可以发现打包的项目分为了一个lib文件夹和一个Jar文件,其中lib文件夹下是该项目的依赖包,将lib文件夹和Jar文件一起上传到服务器运行即可(保持lib文件夹与Jar文件同级)。

image.png

后续部署时,如果仅仅项目代码有变化而项目依赖没有变化,则重新上传到服务器时不需要重复上传这个文件夹,仅仅上传Jar文件即可。

  • 标题: SpringBoot项目使用Gradle打包为可执行Jar包并分离项目依赖
  • 作者: Cappuccilo
  • 创建于 : 2024-03-05 01:54:22
  • 更新于 : 2024-03-05 03:46:49
  • 链接: https://www.cappuccilo.top/2024/03/04/springboot1/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
SpringBoot项目使用Gradle打包为可执行Jar包并分离项目依赖