传统的 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 新特性总结及迁移指南
……