Jar包优化-去除内置的依赖Jar包

本文探讨了多模块项目打包时如何避免重复依赖的问题。通过手动排除和使用特定插件,实现了减小Jar包体积的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题来源

项目搭建完成之后,往往需要打成Jar包进行部署。单模块项目还好,但是一旦遇到多模块项目,打完之后每个能启动的模块都会有一个Jar包,为了保证Jar包能够单独启动,Maven会将所有在pom.xml里面关联的依赖(包括继承自父模块)都整合进Jar包。

 

这样会带来一个问题,打出的Jar包体积比较大,但这几个项目引入的外部差异化Jar包可能并不是很多,有很多Jar包其实是可以共用的(比如spring自带的启动包),在同一个地点部署的前提下,每个Jar包里面都包含这些依赖包其实是重复的。那么有什么办法能够使这些依赖进行复用呢,今天我们就来探讨一下这个问题。

2.手动去除插件

我们可能会想到既然公共的Jar包重复了,那么就直接去除公共Jar包就行了。而在spring boot maven里面,给出的去除方法是这样的。

jar包依赖去除-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.1.RELEASE</version>
<configuration>
    <layout>ZIP</layout>
    <excludes>
        <exclude>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclude>
        <exclude>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclude>
    </excludes>
</configuration>
</plugin>

没错......这样就有一个很严重的问题.....那就是每个Jar包都得自己手动去除.....

我们当然要寻找更好的解决方案,事实上的确有更好的替代,那就是下面提到的插件。

3.利用插件帮助去除依赖

我们可以在项目的启动类(如果有多个启动类那就在这些启动类的总父类)里添加这样一个插件

jar包依赖去除-2
1
2
3
4
5
6
7
8
9
10
11
12
<!--jar包压缩插件-->
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot.experimental</groupId>
            <artifactId>spring-boot-thin-layout</artifactId>
            <version>1.0.8.RELEASE</version>
        </dependency>
    </dependencies>
</plugin>

然后我们打完包就会发现jar包神奇的变成了

体积骤降的原因是因为其中的依赖包都被剥离了,自然这样的包是不能直接运行的,会报错

 

我们需要在jar包同级目录下运行指令

1
java -Dthin.root=lib -jar IDKProxy.jar

这样根据插件打出的jar包会自动的下载依赖到你用Dthin.root指定的文件夹中

程序也会自动运行,在存在加载好的lib依赖包的前提下,下次直接运行只要直接:java -jar jar包名 就可以直接运行了

如果其他jar包依赖相同,那也可以直接运行,不同的话只要将不同的依赖放入lib就行了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值