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的方式已经完成。
浙公网安备 33010602011771号