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 構建配置。微信

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

https://docs.spring.io/spring...

二、打成 Jar 包

使用 mvn package 命令或者 IDE 中的 Maven 插件均可以打包。Maven 不熟悉的請關注Java技術棧微信公衆號,在後臺回覆: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-INFMANIFEST.MF 中找到應用程序啓動類:spring-boot

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包的壓縮、解壓使用指南,或者關注Java技術棧微信公衆號,在後臺回覆:java。

運行命令演示:

$ 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 的方法看這篇文章:運行 Spring Boot 應用的 3 種方式!

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

在公衆號後臺回覆:boot,還能獲取棧長整理的往期 Spring Boot 教程,都是實戰乾貨,如下僅爲部分預覽。

  • Spring Boot 讀取配置的幾種方式
  • Spring Boot 如何作參數校驗?
  • Spring Boot 最核心的 25 個註解!
  • Spring Boot 2.x 啓動全過程源碼分析
  • Spring Boot 2.x 新特性總結及遷移指南
  • ……

獲取全部 Spring Boot 示例代碼,請關注微信公衆號 "Java技術棧" 在後臺回覆關鍵字:bootcode。

未完,棧長將陸續分享 Spring Boot 最新技術教程,如今已經寫了一堆存貨了,關注微信公衆號 "Java技術棧" ,公衆號第一時間推送!

相關文章
相關標籤/搜索