[转]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 替换为依赖包所在的目录。

上一篇下一篇

猜你喜欢

热点阅读