Spring Boot能够将整个应用打包到一个 JAR 文件中,同时它也支持将应用的主 JAR 包和第三方依赖包分离,以达到减小 JAR 文件大小的目的,提高应用启动速度的目的。下面是详细的攻略:
1. 配置 Maven 插件
在 Spring Boot 应用的 pom.xml 文件中,添加如下插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.MyApplication</mainClass>
<layout>JAR</layout>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
其中,主要配置如下:
mainClass
表示启动类的全限定名,该类在打包后的 JAR 包中是默认的启动类;layout
配置打包方式,选择JAR
进行打包;excludes
指定需要排除的依赖,可以根据需要调整。
2. 使用 Maven 打包
在 Maven 命令行中执行:
mvn clean package
执行完成后,可以在项目的 target 目录下找到生成的 JAR 包。此时,JAR 包中已经包含了所有的依赖包。
3. 分离 JAR 包
使用如下命令,将主 JAR 包和依赖包进行分离:
jar -xf example.jar
执行该命令后,可以看到项目的根目录下增加了许多目录和文件,其中包括以下几个目录:
BOOT-INF/classess/
BOOT-INF/lib/
META-INF/
其中,BOOT-INF/classess/
目录下存放了项目的 Java class 文件,BOOT-INF/lib/
目录下存放了分离的依赖包,META-INF/
目录下包含了项目的元数据信息。
可以通过如下命令,来启动应用程序:
java -cp example.jar:BOOT-INF/lib/* com.example.MyApplication
其中,:BOOT-INF/lib/*
字符串表示添加依赖包的路径为当前目录的 BOOT-INF/lib/
目录,com.example.MyApplication
为启动类的全限定名。
示例
示例一:Spring Boot Web 应用
一个 Spring Boot 的 Web 应用,其打包和分离示例配置如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.MyApplication</mainClass>
<layout>JAR</layout>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<classifier>exec</classifier>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行如下命令,将 JAR 包分离:
jar -xf example-exec.jar
启动应用程序:
java -cp example.jar:example-exec/BOOT-INF/lib/* com.example.MyApplication
其中,example-exec
目录为 example-exec.jar
文件解压后的目录名称。
示例二:Spring Boot 非 Web 应用
一个 Spring Boot 的非 Web 应用,其打包和分离示例配置如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.MyApplication</mainClass>
<layout>JAR</layout>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<classifier>exec</classifier>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行如下命令,将 JAR 包分离:
jar -xf example-exec.jar
启动应用程序:
java -cp example.jar:example-exec/BOOT-INF/lib/* com.example.MyApplication
其中,example-exec
目录为 example-exec.jar
文件解压后的目录名称。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot打包实现项目JAR包和依赖JAR包分离 - Python技术站