欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包

程序员文章站 2022-03-30 16:29:39
...

    SpringBoot项目中有两种jar包,一种是由gradle(maven)自动构建工具引入的第三方jar包(依赖包)  另一种是SpringBoo项目打的可以执行的jar包(可运行包)  可以通过   java -jar 包名.jar   运行。

    之前没有专门研究过这两者的区别,直到最近搭建自己的maven私服,将SpringBoot项目打成jar包作为其他项目的依赖包时候报找不到类的错误,才简单研究了一下两者的区别和如何打包。

一、两者的区别

    于是我在idea中针对同一个SpringBoot项目打了这两种包,我们看一下两者的文件结构。

SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包

    首先我们看看可运行jar包,在可运行jar包中我们的代码是存在于BOOT-INF/classes/ 目录下,还有就是META-INF文件夹中MANIFEST.MF文件

SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包

我们可以看到文件里面Start-Class为启动类,Spring-Boot-Classes为编译后代码存放的位置,Spring-Boot-Lib为第三方依赖包存放的位置以及SpringBoot版本信息等等。

   再来看看依赖包,根目录就相当于项目的classpath,直接就是代码。而META-INF/MANIFEST.MF文件中没有上面那些内容。

SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包  

 

二、如何打包

    我这里SpringBoot版本是2.2.6.RELEASE 开发工具是idea、自动构建工具是gradle.

    1、可运行jar包打包。

    这个比较简单,在idea直接打开gradle界面Tasks->build->bootJar双击执行 即可。

SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包

   这个jar包可通过  java -jar命令启动。

    2、依赖jar包打包

   我们可以看到在Tasks中有一个jar命令 ,但是双击执行之后发现没有生成jar包,通过查阅文档发现,需要在build.gralde中加个配置。

SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包

文档链接:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/gradle-plugin/reference/html/ 

   我们在build.gradle中加入以上配置,再次执行jar任务,即可将项目打成依赖包。(  还有一种情况会用到以上配置,就是在多模块项目中,各个模块之间项目依赖,如果不加这个配置,默认就是可运行包,就会报找不到类的报错,切记注意。

SpringBoot+gradle项目中的两种jar包(依赖包和可运行包)及如何在Idea中打包

    不管是可运行jar包和依赖包打包成功,都会保存到build/libs文件夹下,由于名字相同所以会存在项目覆盖的情况,所以需要在build.gradle中加入配置

//可运行包的分类器(打包成功后的会以项目名-boot为包名)
bootJar.classifier = 'boot'