【springboot】项目迭代下的jar包优化

以项目中微服务的block模块做举例,先上没瘦身之前的jar包。

再来看看打包瘦身之后的jar包大小,大小不是小了一点点。

瘦身准备

1.首先我们要对Jar包有一个初步认识,它的内部结构如下

example.jar
 |
 +-META-INF
 |  +-MANIFEST.MF
 +-org
 |  +-springframework
 |     +-boot
 |        +-loader
 |           +-<spring boot loader classes>
 +-BOOT-INF
    +-classes
    |  +-mycompany
    |     +-project
    |        +-YourClasses.class
    +-lib
       +-dependency1.jar
       +-dependency2.jar

运行该Jar时默认从BOOT-INF/classes加载class,从BOOT-INF/lib加载所依赖的Jar包。如果想要加入外部的依赖Jar,可以通过设置环境变量LOADER_PATH来实现。

如此一来,就可以确认我们的思路了:
1. 把那些不变的依赖Jar包(比如spring依赖、数据库Driver等,这些在不升级版本的情况下是不会更新的)从Flat Jar中抽离到单独的目录,如libs
2. 在启动Jar时,设置LOADER_PATH使用上一步的libs

这样,我们最终打包的jar包体积就大大减少,每次迭代后只需要更新这个精简版的Jar即可。

具体步骤

1.先备份原先的jar包,找到jar包打开我们发现BOOT-INF下的lib里有好多的jar包,我们将这些jar包先存到一个文件夹里。

2.修改pom.xml,如图,设置为nothing,将在打包时剔除所有引入的jar包,我这里把常用的工具类common也作为jar包剔除出去了,最后直接加到了totallib里了。

<dependency>
   <groupId>com.data_fusion</groupId>
   <artifactId>common</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.1.RELEASE</version>
                <configuration>
                    <layout>ZIP</layout>
                    <includes>
                        <include>
                            <groupId>nothing</groupId>
                            <artifactId>nothing</artifactId>
                        </include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.如何运行

我们整个项目一次打完包就是这样的,其中totallib里就是我们整个项目所有引用的jar包了,如图。

我们启动时只需要加上-Dloader.path=totallib,启动命令:java -Dloader.path=totallib -jar block_controller-1.0.0.jar   --spring.profiles.active=test

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值