SpringBoot项目拆分构建jar包,减少更新体积

1、添加以下配置

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <version>2.3.4.RELEASE</version>
                        <configuration>
                            <mainClass>${start-class}</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>
                    <!-- 复制依赖到单独目录 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <version>3.3.0</version>
                        <executions>
                            <execution>
                                <id>copy-dependencies</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                                <configuration>
                                    <!-- 依赖输出目录(相对于target目录) -->
                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- 配置MANIFEST.MF,对应文件内Class-Path会包含所有lib下的依赖,结合启动参数-Dloader.path启动加载 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>3.3.0</version>
                        <configuration>
                            <archive>
                                <manifest>
                                    <!-- 不打包依赖到jar中 -->
                                    <addClasspath>true</addClasspath>
                                    <!-- 外部依赖的相对路径(相对于项目jar的位置) -->
                                    <classpathPrefix>lib/</classpathPrefix>
                                    <mainClass>${start-class}</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

构建后target目录内结构如图:

image

 对应jar包内已经没有了依赖的jar包目录,改造前依赖会在BOOT-INF/lib目录下:

image

2、修改启动命令:java -Dloader.path=target/lib/ -jar target/embed-service-template.jar

经过上面改造后,第一次安装部署所有(运行jar包及依赖lib目录),后续在不操作依赖的前提下升级应用服务,更新的文件体积会小很多,加速部署流程。

 

其中会有一部分小坑:

1、pom中引用依赖的配置scope 要删除掉;

2、引入的依赖路径一定要准确,不然会报找不到某些类的错误;

3、-Dloader.path指定的依赖目录也要准确,也会报找不到某些类的错误。

posted @ 2025-08-05 14:22  Commissar-Xia  阅读(26)  评论(0)    收藏  举报