Springboot解决jar太大问题(3种)以及如何打包并本地引入jar

一、为什么Springboot打包后会很大

springboot项目打包成jar项目太大原因是SpringBoot应用其实默认打包方式就是打包成fat jar(可执行的),即项目的依赖jar包也会被包含在Spring Boot项目的jar包当中,这个fat jar会把Tomcat内置进来,所以部署时也不需要单独配置Tomcat,因此部署一个SpringBoot-jar虽然非常简单,但同时包也会很大,构建或传输jar包时,耗时耗资源较多。所以有时将jar变小是很有必要的。

1.1打包的三种方式

1.1.1、删除无效jar:

需要梳理每个服务的依赖Jar,看看是否有部分用不到的包可以去掉依赖。但这个方式减小十分有限,且如果没有梳理清楚容易删错依赖导致jar

加载不出。

1.1.2、将Jar与引用的第三方Jar分离:

 

springboot自带插件spring-boot-maven-plugin,该插件能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。但是也因为他,springboot项目打包后会自动下载引入的jar放在lib文件夹内,因此我们可以通过编写一个脚本使其分离,将所有的第三方Jar放到一个本地lib文件内(自己建的),然后被引用后通过命令行将Jar和第三方Jar联系起来,具体如下:

1.1.2.1 将第三方Jar单独存放,使用下面的命令行,把依赖的包放到D:\temp\lib:

mvn dependency:copy-dependencies -DoutputDirectory=D:\temp\lib -DincludeScope=runtime

1.1.2.2 单独打包我们自己写的代码,修改pom.xml:

<plugin>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-maven-plugin</artifactId>

    <configuration>

        <mainClass>com.jiawa.blog.config.BlogApplication</mainClass>

        <layout>ZIP</layout>

        <includes>

            <include>

                <groupId>nothing</groupId>

                <artifactId>nothing</artifactId>

            </include>

        </includes>

    </configuration>

    <executions>

        <execution>

            <goals>

                <goal>repackage</goal>

            </goals>

        </execution>

    </executions>

</plugin>

1.1.2.3

java -Dloader.path=d:\temp\lib -jar target/blog.jar

 

1.1.3第三种方式删除spring-boot-maven-plugin插件再进行打包

再理解上文所述springboot自带插件spring-boot-maven-plugin,使用该插件会自动下载引入的jar后,那么如果自己写的项目已经有了这些jar,只需要其编写的方法是否可以通过直接删除该插件实现?(自行测试没有问题)

1.1.3.1删除spring-boot-maven-plugin依赖

1.1.3.2通过开发工具如idea执行clean和package俩命令

1.1.3.3打包成功、 查看只有14kb

 

 

二、如何本地引入Jar(本人用的是第一种,测试成功了,第二种未尝试)

2.1.1第一种方式:

首先,在项目目录中resources下创建lib文件夹jar用来存放本地jar包,如下图所示。

 2.1.2、pom文件中加入如下内容,以添加its.common.mail-0.0.1.jar为例。

(注意systemPath为jar的路径,而${project.basedir}中<project> 是pom.xml 的根节点,project.basedir 就是根节点的下级节点,所以这个不用管)

2.1.3、此时jar呈现可打开的状态,说明已经成功本地引入

2.2.1第二种方式

 File--->Project Structure,如下:

2.2.2、找到之前生成的jar包:

2.2.3此时项目中已经引入了myjar.jar。如下:

至此2种不同本地引入jar的方式已经完成。

posted @ 2022-11-02 10:33  超人不会飞J  阅读(759)  评论(0)    收藏  举报