(内容学习于up主"编程不良人")
SpringBoot瘦身实战
什么是jar瘦身
SpringBoot 应用瘦身顾名思议:就是将 SpringBoot 应用打包的 jar 利用合理的方式、方法减小体积。
为什么瘦身
SpringBoot虽然很方便就能搭建起来一个服务,带来的问题就是jar包很大。
这是自己搭建的微服务项目,file服务中,总代码文件不到10个,打包出来的jar已经快80M。
实际项目中打包出来的jar,已经达130M+。
虽然使用jenkins自动化部署已经很方便了,但如果jenkins与目标服务器不是在同一内网下,传输还是很慢。
瘦身部署实战
修改spring-boot-maven-plugin配置
<build>
<resources>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.html</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources/</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*.yml</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>utf-8</encoding>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>utf-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.4.RELEASE</version>
<configuration>
<mainClass>pers.kw.CrmServer</mainClass>
<includeSystemScope>true</includeSystemScope>
<fork>true</fork>
<!--解决windows命令行窗口中文乱码-->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<layout>
ZIP
</layout>
<includes>
<!--这里是填写需要包含进去的jar,
必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来
如果没有则non-exists ,表示不打包依赖
-->
<include>
<groupId>non-exists</groupId>
<artifactId>non-exists</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<!--repackage:创建一个自动可执行的jar或war文件。它可以替换常规的artifact,或者用一个单独的classifier附属在maven构建的生命周期中。-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
导出依赖包
方式一 mvn插件
增加maven-dependency-plugin插件配置
<!-- 此插件用于将依赖包抽出-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!--是否排除传递性-->
<excludeTransitive>false</excludeTransitive>
<!--是否去掉 jar 包版本信息-->
<stripVersion>false</stripVersion>
<!--包含范围-->
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
方式二 mvn命令
mvn dependency:copy-dependencies -DoutputDirectory=指定输出目录
测试运行
前台启动
java -jar -Dloader.path="./lib" kw-crm-service-1.0.0.jar
后台启动
nohup java -jar -Dloader.path="./lib" kw-crm-service-1.0.0.jar > /dev/null 2>&1 &
ps: 在mac中使用nohup命令,不知为何自动退出了。。。
在linux中测试成功
补充:如果是docker部署,则需要把lib进行挂载