Spring Boot 怎麼打一個可執行 Jar 包?

Spring Boot 怎麼打一個可執行 Jar 包?


傳統的 Java 應用程序都須要打一個 war 包,併到到 Tomcat webapps 目錄下運行。html

Java 支持打 Jar 包,但沒有提供一個標準的方式在一個 Jar 包內再加載嵌入別的 Jar 包,通常須要擴展類加載器來實現,即便這樣,也作不到打成一個包運行,由於沒有 Servlet 容器。java

有了 Spring Boot 框架以後,這一切都變得簡單,咱們能夠很方便的將應用程序打成一個可執行 Jar 包。web

怎麼打成 Jar 包運行?

一、添加插件

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
            <configuration>
                <classifier>exec-${env}</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>
複製代碼

這裏是添加了一個 Maven 打包插件,經過配置能夠定製打成的 Jar 包的格式,如:javastack-exec-dev.jar。spring

若是你是用的 spring-boot-starter-parent 方式來使用 Spring Boot,那就不用寫 executions 選項,由於它包括了 executions repackage 構建配置。bash

這個插件的更多用法參考:微信

https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/maven-plugin/usage.htmlapp

二、打成 Jar 包

使用 mvn package 命令或者 IDE 中的 Maven 插件均可以打包。框架

打完包以後,在項目 target 目錄就能夠看到打成的 Jar 包。webapp

這個 Jar 包除了包括編譯完的 class 文件,還內置了 Servlet 容器,並集成了全部須要依賴的其餘 Jar 包庫,咱們來看下這個 Jar 包的目錄結構。maven

├─BOOT-INF
│  ├─classes
│  │  └─cn
│  │      └─javastack
│  │          └─demo
│  └─lib
├─META-INF
│  └─maven
│      └─cn.javastack
│          └─demo
└─org
    └─springframework
        └─boot
            └─loader
                ├─archive
                ├─data
                ├─jar
                └─util
複製代碼

在文件 \META-INF\MANIFEST.MF 中找到應用程序啓動類:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: javastack
Start-Class: cn.javastack.demo.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.1.3.RELEASE
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_151
Main-Class: org.springframework.boot.loader.JarLauncher
複製代碼

三、運行 Jar 包

運行命令格式:

$ java -jar xxx.jar

運行命令演示:

$ java -jar javastack-exec-dev.jar

.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.3.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864) 複製代碼

好了,跑起來了。

好了,今天的分享就到這裏,更多 Spring Boot 文章正在撰寫中,關注Java耕耘者微信公衆號獲取第一時間推送。

在公衆號後臺加:小助理,還能獲取整理的往期 Spring教程,都是實戰乾貨,如下僅爲部分預覽。

  • Spring Boot 讀取配置的幾種方式

  • Spring Boot 如何作參數校驗?

  • Spring Boot 最核心的 25 個註解!

  • Spring Boot 2.x 啓動全過程源碼分析

  • Spring Boot 2.x 新特性總結及遷移指南

  • ……

相關文章
相關標籤/搜索