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目录内结构如图:

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

2、修改启动命令:java -Dloader.path=target/lib/ -jar target/embed-service-template.jar
经过上面改造后,第一次安装部署所有(运行jar包及依赖lib目录),后续在不操作依赖的前提下升级应用服务,更新的文件体积会小很多,加速部署流程。
其中会有一部分小坑:
1、pom中引用依赖的配置scope 要删除掉;
2、引入的依赖路径一定要准确,不然会报找不到某些类的错误;
3、-Dloader.path指定的依赖目录也要准确,也会报找不到某些类的错误。

浙公网安备 33010602011771号