傳統的 Java 應用程序都須要打一個 war 包,併到到 Tomcat webapps 目錄下運行。html
Java 支持打 Jar 包,但沒有提供一個標準的方式在一個 Jar 包內再加載嵌入別的 Jar 包,通常須要擴展類加載器來實現,即便這樣,也作不到打成一個包運行,由於沒有 Servlet 容器。java
有了 Spring Boot 框架以後,這一切都變得簡單,咱們能夠很方便的將應用程序打成一個可執行 Jar 包。web
<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
使用 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
複製代碼
運行命令格式:
$ 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 新特性總結及遷移指南
……