SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包
SpringBoot项目中有两种jar包,一种是由gradle(maven)自动构建工具引入的第三方jar包(依赖包) 另一种是SpringBoo项目打的可以执行的jar包(可运行包) 可以通过 java -jar 包名.jar 运行。
之前没有专门研究过这两者的区别,直到最近搭建自己的maven私服,将SpringBoot项目打成jar包作为其他项目的依赖包时候报找不到类的错误,才简单研究了一下两者的区别和如何打包。
一、两者的区别
于是我在idea中针对同一个SpringBoot项目打了这两种包,我们看一下两者的文件结构。
首先我们看看可运行jar包,在可运行jar包中我们的代码是存在于BOOT-INF/classes/ 目录下,还有就是META-INF文件夹中MANIFEST.MF文件
我们可以看到文件里面Start-Class为启动类,Spring-Boot-Classes为编译后代码存放的位置,Spring-Boot-Lib为第三方依赖包存放的位置以及SpringBoot版本信息等等。
再来看看依赖包,根目录就相当于项目的classpath,直接就是代码。而META-INF/MANIFEST.MF文件中没有上面那些内容。
二、如何打包
我这里SpringBoot版本是2.2.6.RELEASE 开发工具是idea、自动构建工具是gradle.
1、可运行jar包打包。
这个比较简单,在idea直接打开gradle界面Tasks->build->bootJar双击执行 即可。
这个jar包可通过 java -jar命令启动。
2、依赖jar包打包
我们可以看到在Tasks中有一个jar命令 ,但是双击执行之后发现没有生成jar包,通过查阅文档发现,需要在build.gralde中加个配置。
文档链接:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/gradle-plugin/reference/html/
我们在build.gradle中加入以上配置,再次执行jar任务,即可将项目打成依赖包。( 还有一种情况会用到以上配置,就是在多模块项目中,各个模块之间项目依赖,如果不加这个配置,默认就是可运行包,就会报找不到类的报错,切记注意。)
不管是可运行jar包和依赖包打包成功,都会保存到build/libs文件夹下,由于名字相同所以会存在项目覆盖的情况,所以需要在build.gradle中加入配置
//可运行包的分类器(打包成功后的会以项目名-boot为包名)
bootJar.classifier = 'boot'
上一篇: idea spring boot打包
下一篇: jar包上传私服