Spring Boot 怎么打一个可执行 Jar 包?
传统的 Java 应用程序都需要打一个 war 包,并到到 Tomcat webapps 目录下运行。
Java 支持打 Jar 包,但没有提供一个标准的方式在一个 Jar 包内再加载嵌入别的 Jar 包,一般需要扩展类加载器来实现,即使这样,也做不到打成一个包运行,因为没有 Servlet 容器。
有了 Spring Boot 框架之后,这一切都变得简单,我们可以很方便的将应用程序打成一个可执行 Jar 包。
怎么打成 Jar 包运行?
1、添加插件
<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-boot-starter-parent 方式来使用 Spring Boot,那就不用写 executions 选项,因为它包括了 executions repackage 构建配置。
这个插件的更多用法参考:
https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/maven-plugin/usage.html
2、打成 Jar 包
使用 mvn package 命令或者 IDE 中的 Maven 插件都可以打包。Maven 不熟悉的请关注Java技术栈微信公众号,在后台回复:maven,干货栈长我都整理好了。
打完包之后,在项目 target 目录就可以看到打成的 Jar 包。
这个 Jar 包除了包括编译完的 class 文件,还内置了 Servlet 容器,并集成了所有需要依赖的其他 Jar 包库,我们来看下这个 Jar 包的目录结构。
├─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
3、运行 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技术栈" ,公众号第一时间推送!
Spring Boot 怎么打一个可执行 Jar 包?的更多相关文章
- Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?
前两天被人问到这样一个问题: "松哥,为什么我的 Spring Boot 项目打包成的 jar ,被其他项目依赖之后,总是报找不到类的错误?" 大伙有这样的疑问,就是因为还没搞清楚 ...
- spring boot项目maven打包可执行JAR
在pom.xml中添加如下配置: <!-- 打包可执行jar包 --> <plugin> <groupId>org.springframework.boot< ...
- 通过idea 打包 spring maven项目打包为可执行jar包
用assembly打包一直报错: shangyanshuodeMacBook-Pro:target shangyanshuo$ java -jar jobscrawler-1.0-SNAPSHOT-j ...
- Spring Boot 的项目打包成的 JAR 包,制作成 docker 镜像并运行
上一篇:Docker学习(三)docker容器操作 首先把本地的项目打包好,我这里直接把已经打包好的springboot-mybatis-0.0.1-SNAPSHOT.jar包直接上传到linuxmy ...
- JAR-使用JAVA命令编译打包一个可执行jar包
一.开发一个演示项目 项目源代码开发 项目名称叫jar-package-example(其实只是一个文件夹, 用以将演示的所有文件夹和文件存放在其中, 没啥其它作用), 为了方便, 后文统一叫jar- ...
- 将 Spring boot 项目打成可执行Jar包,及相关注意事项(main-class、缺少 xsd、重复打包依赖)
最近在看 spring boot 的东西,觉得很方便,很好用.对于一个简单的REST服务,都不要自己部署Tomcat了,直接在 IDE 里 run 一个包含 main 函数的主类就可以了. 但是,转念 ...
- Maven- 使用Maven构建一个可执行jar
How to Create an Executable JAR with Maven 1.最重要的是使用jar类型,<packaging>jar</packaging>.当然不 ...
- Spring Boot可执行Jar包运行原理
目录 1. 打可执行Jar包 2. 可执行Jar包内部结构 3. JarLauncher 4. 简单总结 5. 远程调试 Spring Boot有一个很方便的功能就是可以将应用打成可执行的Jar.那么 ...
- Spring Boot 2.x 之构建Fat Jar和可执行Jar
Spring Boot提供的Maven插件spring-boot-maven-plugin可以用来构建Fat Jar和可执行Jar. 1.Fat Jar Fat Jar需要使用 java -jar x ...
随机推荐
- java字符串常用方法总结(更新中..)
一.String类 1.字符串拼接 String str1 = "abcd"; String str2 = "efgh"; System.out.println ...
- Java 8 New Features
What's New in JDK 8 https://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html Java Pla ...
- Leetcode 297. Serialize and Deserialize Binary Tree
https://leetcode.com/problems/serialize-and-deserialize-binary-tree/ Serialization is the process of ...
- Map去重,去重value相同的元素,保留key最小的那个值
Map<Integer,String>,Integer代表时间撮,String代表文本信息去重函数:就是删除Map中value相同的元素,只保留key最小的那个元素 public stat ...
- 微信小程序获取用户手机号 记录 (PHP)
1. 用户登录时需要获取 openid ,同时可以获取 session_key, 二者同时返回, 此时我们要将二者存储在服务端. 2. 小程序端 button 按钮拉起授权, 向api 传递 iv 和 ...
- 解锁 redis 锁的正确姿势
redis 是 php 的好朋友,在 php 写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为.这个时候我们就要用到锁.锁的方式有好几种,php 不能在内存中用锁,不能使用 zo ...
- Django 之 rest_framework 响应器使用
Django 之 rest_framework 响应器使用 使用部分: 第一步:导入模块 from rest_framework.renders import BrowsableAPIRenderer ...
- python实现文件批量编码转换
起因:大三做日本交换生期间在修一门C语言图像处理的编程课,在配套书籍的网站上下载了sample,但是由于我用的ubuntu18.04系统默认用utf-8编码,而文件源码是Shift_JIS编码,因而文 ...
- Linux运维技术之讲解RAID
RAID: 独立冗余磁盘阵列 ,将多块磁盘组合起来,组合成一个阵列,当成一个逻辑设备来使用的机制! RAID级别:仅代表磁盘组织不同,没有上下之分,组合raid时,不仅要考虑速度,还要考虑可用性. 磁 ...
- Tessy — 嵌入式软件单元测试/ 集成测试工具
Tessy 源自戴姆勒- 奔驰公司的软件技术实验室,由德国Hitex 公司负责全球销售及技术支持服务,是一款专门针对嵌入式软件进行单元/ 集成测试的工具.它可以对C/C++ 代码进行单元.集成测试,可 ...