打包Spring Boot应用

我们在Maven的使用插件一节中介绍了如何使用maven-shade-plugin打包一个可执行的jar包。在Spring Boot应用中,打包更加简单,因为Spring Boot自带一个更简单的spring-boot-maven-plugin插件用来打包,我们只需要在pom.xml中加入以下配置:

  1. <project ...>
  2. ...
  3. <build>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-maven-plugin</artifactId>
  8. </plugin>
  9. </plugins>
  10. </build>
  11. </project>

无需任何配置,Spring Boot的这款插件会自动定位应用程序的入口Class,我们执行以下Maven命令即可打包:

  1. $ mvn clean package

springboot-exec-jar项目为例,打包后我们在target目录下可以看到两个jar文件:

  1. $ ls
  2. classes
  3. generated-sources
  4. maven-archiver
  5. maven-status
  6. springboot-exec-jar-1.0-SNAPSHOT.jar
  7. springboot-exec-jar-1.0-SNAPSHOT.jar.original

其中,springboot-exec-jar-1.0-SNAPSHOT.jar.original是Maven标准打包插件打的jar包,它只包含我们自己的Class,不包含依赖,而springboot-exec-jar-1.0-SNAPSHOT.jar是Spring Boot打包插件创建的包含依赖的jar,可以直接运行:

  1. $ java -jar springboot-exec-jar-1.0-SNAPSHOT.jar

这样,部署一个Spring Boot应用就非常简单,无需预装任何服务器,只需要上传jar包即可。

在打包的时候,因为打包后的Spring Boot应用不会被修改,因此,默认情况下,spring-boot-devtools这个依赖不会被打包进去。但是要注意,使用早期的Spring Boot版本时,需要配置一下才能排除spring-boot-devtools这个依赖:

  1. <plugin>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. <configuration>
  5. <excludeDevtools>true</excludeDevtools>
  6. </configuration>
  7. </plugin>

如果不喜欢默认的项目名+版本号作为文件名,可以加一个配置指定文件名:

  1. <project ...>
  2. ...
  3. <build>
  4. <finalName>awesome-app</finalName>
  5. ...
  6. </build>
  7. </project>

这样打包后的文件名就是awesome-app.jar

练习

打包Spring Boot应用 - 图1下载练习:使用Spring Boot插件打包可执行jar (推荐使用IDE练习插件快速下载)

小结

Spring Boot提供了一个Maven插件用于打包所有依赖到单一jar文件,此插件十分易用,无需配置。

读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论:

打包Spring Boot应用 - 图2 打包Spring Boot应用 - 图3