SpringBoot 项目瘦身

场景

在使用 SpringBoot 的过程中发现打包出来的 Jar 是一个 Fat Jar,里面包含了所有项目依赖的第三方 Jar,这就导致在部署的时候十分不方便,动辄 100M 左右的项目实在难以快速部署。

解决方案

由于打包出来的 Jar 绝大部分都由项目依赖的第三方 Jar 组成,所以只要将这部分 Jar 包单独抽取出来,然后在启动 SpringBoot 项目的时候指定使用的 lib 就好了。

实现步骤

1.pom 增加 plugin

2.项目启动增加额外参数

<build>
        <finalName>${project.artifactId}-${project.version}</finalName>

        <pluginManagement>
            <!-- 使用两个插件对 SpringBoot 项目瘦身,依赖的 jar 都存放在 lib 文件夹下,部署项目如果没有新的依赖则可以只部署项目中的几个 jar 包即可
                 注意:1.项目有新的依赖添加时,需要上传新的 jar 包到服务器
                      2.core、dao 的 jar 也在 lib 中,发布时也需要替换
                      3.项目启动方式 java -jar -Dloader.path=lib api-0.0.1-SNAPSHOT.jar
             -->
            <plugins>
                <!-- 拷贝项目所有依赖jar文件到构建lib目录下 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <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>
                                <stripVersion>false</stripVersion>
                                <silent>true</silent>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <!-- Spring Boot模块jar构建 -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <includes>
                            <!-- 不存在的include引用,相当于排除所有maven依赖jar,没有任何三方jar文件打入输出jar -->
                            <include>
                                <groupId>null</groupId>
                                <artifactId>null</artifactId>
                            </include>
                        </includes>
                        <layout>ZIP</layout>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>

    </build>
posted @ 2021-03-31 15:09  ManaStuDent  阅读(12)  评论(0编辑  收藏  举报