[转]Spring Boot依赖分离打包
2018-12-23 本文已影响0人
小孩真笨
看到一篇关于spring boot打包的文档,思路很清晰。特此转载部分重点内容。原文链接
Spring Boot打包的方式
Spring Boot默认的打包方式为fat jar,即项目的依赖jar包也会被包含在Spring Boot项目的jar包当中。Spring Boot项目的jar包结构如图所示:
Spring boot打包的默认结构如图所示,所有依赖jar包位于BOOT-INF/lib目录下。
Spring Boot默认fat jar的打包方式好处是比较多的。项目最终生成仅仅是一个文件,基本上不依赖运行环境,极大地方便了部署和上线操作。
可是这种方便的fat jar方式并不适用于各种场景。比方说我们需要将依赖的jar包独立出来,不放入最终项目的jar文件内,该怎么操作呢?
使用Spring Boot Thin Launcher分离依赖
我们可以使用Spring Boot Thin Launcher来打包Spring Boot项目。该工具的GitHub地址为:https://github.com/dsyer/spring-boot-thin-launcher
<plugins>
<!-- 加入该配置,使用maven package,依赖jar不会打包在项目最终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.12.RELEASE</version>
</dependency>
</dependencies>
</plugin>
<!-- 加入该配置,maven package执行时会在target目录整理好依赖包 -->
<plugin>
<groupId>org.springframework.boot.experimental</groupId>
<artifactId>spring-boot-thin-maven-plugin</artifactId>
<version>1.0.12.RELEASE</version>
<executions>
<execution>
<!-- Download the dependencies at build time -->
<id>resolve</id>
<goals>
<goal>resolve</goal>
</goals>
<inherited>false</inherited>
</execution>
</executions>
</plugin>
</plugins>
整理好的依赖包所在的目录为target/thin/root/repository
我们仍然可以使用java -jar 命令启动项目。
如果启动时需要指定依赖包的目录,可以使用如下命令:
java -Dthin.root=path/to/lib -jar spring-boot-app.jar
将path/to/lib 替换为依赖包所在的目录。