Spring Boot 构建工具插件
本文为官方文档直译版本。原文链接
Spring Boot 构建工具插件
- 引言
- Spring Boot Maven Plugin
- Spring Boot Gradle Plugin
- Spring Boot AntLib 模块
- Spring Boot Ant 任务
- 使用 "exejar" 任务
- 示例
- 使用 "findmainclass" 任务
- 例子
- 支持其它构建系统
- 重新包装档案
- 嵌套库
- 查找主类
- 重新打包实现例子
引言
Spring Boot 为 Maven 和 Gradle 提供了构建工具插件。这些插件提供多种功能,包括打包可执行 jar。本节将提供有关这两个插件的更多详细信息,并在您需要扩展不支持的构建系统时提供一些帮助。如果你刚刚入门,不妨先阅读 “using.html” 部分的 “using.html”。
Spring Boot Maven Plugin
Spring Boot Maven Plugin 在 Maven 中提供 Spring Boot 支持,让您可以打包可执行 jar 或 war 存档并 “就地” 运行应用程序。要使用该插件,您必须使用 Maven 3.6.3 或更高版本。
如需了解更多信息,请参阅插件文档:
- 参考资料(HTML 和 PDF)
- API
Spring Boot Gradle Plugin
Spring Boot Gradle Plugin 在 Gradle 中提供对 Spring Boot 的支持,让你可以打包可执行的 jar 或 war 归档,运行 Spring Boot 应用程序,并使用 spring-boot-dependencies 提供的依赖关系管理。它需要 Gradle 7.x (7.5 或更高版本)或 8.x。欲了解更多信息,请参阅插件文档:
- 参考资料(HTML 和 PDF)
- API
Spring Boot AntLib 模块
Spring Boot AntLib 模块为 Apache Ant 提供基本的 Spring Boot 支持。您可以使用该模块创建可执行 jar。要使用该模块,需要在 build.xml 中声明一个额外的 spring-boot 命名空间,如下例所示:
<project xmlns:ivy="antlib:org.apache.ivy.ant"xmlns:spring-boot="antlib:org.springframework.boot.ant"name="myapp" default="build">...
</project>
请记住使用 -lib 选项启动 Ant,如下例所示:
$ ant -lib <directory containing spring-boot-antlib-3.2.1.jar>
在 “使用 Spring Boot” 一节中,包含了一个将 Apache Ant 与 spring-boot-antlib 结合使用的更完整示例。
Spring Boot Ant 任务
一旦声明了 spring-boot-antlib 命名空间,就可以执行以下附加任务:
- 使用 “exejar” 任务
- 使用 “findmainclass” 任务
使用 “exejar” 任务
您可以使用 exejar 任务创建 Spring Boot 可执行 jar。该任务支持以下属性:
| 属性 | 描述 | 必填 |
|---|---|---|
destfile | 要创建的目标 jar 文件 | Yes |
classes | Java 类文件根目录 | Yes |
start-class | 要运行的主程序类 | No (默认情况是找到的第一个声明了主方法的类) |
以下嵌套元素可与任务一起使用:
| 元素 | 描述 |
|---|---|
resources | 一个或多个资源集,描述了应添加到已创建 jar 文件内容中的一组资源。 |
lib | 一个或多个资源集,应添加到构成应用程序运行时依赖类路径的 jar 库集合中。 |
示例
本节展示两个 Ant 任务示例。
<spring-boot:exejar destfile="target/my-application.jar"classes="target/classes" start-class="com.example.MyApplication"><resources><fileset dir="src/main/resources" /></resources><lib><fileset dir="lib" /></lib>
</spring-boot:exejar>
<exejar destfile="target/my-application.jar" classes="target/classes"><lib><fileset dir="lib" /></lib>
</exejar>
使用 “findmainclass” 任务
exejar 内部使用 findmainclass 任务来查找声明 main 的类。如有必要,您也可以在构建过程中直接使用该任务。支持以下属性:
| 属性 | 描述 | 必填 |
|---|---|---|
classesroot | Java 类文件根目录 | Yes (除非指定了 _mainclass_) |
mainclass | 可用于短路主类搜索 | No |
property | 应根据结果设置的 Ant 属性 | No (如果未指定,结果将被记录) |
例子
本节包含三个使用 findmainclass 的示例。
<findmainclass classesroot="target/classes" />
<findmainclass classesroot="target/classes" property="main-class" />
<findmainclass mainclass="com.example.MainClass" property="main-class" />
支持其它构建系统
如果想使用 Maven、Gradle 或 Ant 以外的构建工具,可能需要开发自己的插件。可执行 jar 需要遵循特定的格式,某些条目需要以未压缩的形式编写(详情请参见附录中的 “可执行 jar 格式” 部分)。
Spring Boot Maven 和 Gradle 插件都使用 spring-boot-loader-tools 来实际生成 jar。如果需要,可以直接使用该库。
重新包装档案
要重新打包现有存档,使其成为独立的可执行存档,请使用 org.springframework.boot.loader.tools.Repackager。Repackager 类需要一个构造函数参数,该参数指向现有的 jar 或 war 压缩包。使用两个可用的 repackage() 方法之一替换原始文件或写入新目标。在运行 Repackager 之前,还可以对其进行各种设置。
嵌套库
重新打包归档文件时,您可以使用 org.springframework.boot.loader.tools.Libraries 接口来引用依赖文件。我们在此不提供任何 Libraries 的具体实现,因为它们通常是特定于构建系统的。
如果您的存档已包含库,您可以使用 Libraries.NONE。
查找主类
如果不使用 Repackager.setMainClass() 指定主类,重新打包程序会使用 ASM 读取类文件,并尝试使用 public static void main(String[] args) 方法查找合适的类。如果找到的候选类超过一个,就会出现异常。
重新打包实现例子
下面的示例展示了一个典型的重新打包实现过程:
import java.io.File;
import java.io.IOException;
import java.util.List;import org.springframework.boot.loader.tools.Library;
import org.springframework.boot.loader.tools.LibraryCallback;
import org.springframework.boot.loader.tools.LibraryScope;
import org.springframework.boot.loader.tools.Repackager;public class MyBuildTool {public void build() throws IOException {File sourceJarFile = ...Repackager repackager = new Repackager(sourceJarFile);repackager.setBackupSource(false);repackager.repackage(this::getLibraries);}private void getLibraries(LibraryCallback callback) throws IOException {// Build system specific implementation, callback for each dependencyfor (File nestedJar : getCompileScopeJars()) {callback.library(new Library(nestedJar, LibraryScope.COMPILE));}// ...}private List<File> getCompileScopeJars() {return ...}}
相关文章:
Spring Boot 构建工具插件
本文为官方文档直译版本。原文链接 Spring Boot 构建工具插件 引言Spring Boot Maven PluginSpring Boot Gradle PluginSpring Boot AntLib 模块Spring Boot Ant 任务使用 "exejar" 任务示例 使用 "findmainclass" 任务例子 支持其它构建系统重新包装档案嵌…...
Java集成消息队列Kafka
1.Kafka maven坐标 在使用Maven构建Java项目时,你可以通过添加Kafka的Maven依赖来引入Kafka相关的库。下面是Kafka的Maven坐标: <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId&g…...
第十四章JSON
第十四章JSON 1.什么是JSON2.JSON的定义和访问3.JSON在JavaScript中两种常用的转换方式4.JavaBean和JSON的相互转换5.List集合和JSON的相互转换6.map集合和JSON的相互转换 1.什么是JSON 2.JSON的定义和访问 JSON的定义 JSON的类型是一个Object类型 JSON的访问 我们要…...
0_项目git地址——正点原子minifly与crazyflie
1、说明: 在每个专栏的第一篇文章,笔者都会贴出项目的git地址,方便后来者学习和复现; 下面介绍两个项目的官网资料和git地址,最后给出两者的对比; 2、正点原子minifly (1)minifly官网资料下载中心&#…...
php 字符串常用函数
目录 1.一些常用函数 2.代码示例 1.一些常用函数 函数名描述trim()删除字符串两端空行或其它预定义符rtrim()删除字符串右边空行或其它预定义符ltrim()删除字符串左边空行或其它预定义符dirname()返回路径中的目录部分str_split()把字符串分割到数组里explode()使用一个字符串…...
Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2)
Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(2) 在 https://zhangphil.blog.csdn.net/article/details/135374279 基础上,增加一个功能,当手指在上面的图片…...
FlinkOnYarn 监控 flink任务
Flink任务一般为实时不断运行的任务,如果没有任务监控, 任务异常时无法第一时间处理会比较麻烦。 这里通过调用API接口方式来获取参数,实现任务监控。 Flink任务监控(基于API接口编写shell脚本) 一 flink-on-yarn 模式 二 编写she…...
C++内存管理机制(侯捷)笔记1
C内存管理机制(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第一讲primitives的笔记 截至…...
【论文阅读】Non-blocking Lazy Schema Changes in Multi-Version
Non-blocking Lazy Schema Changes in Multi-Version Database Management Systems 1. Intro 1.1 Motivation 一个是online能够提供不停机的更新的能力,在很多业务系统里面是必要的。第二个是满足高可用,SaaS、PaaS要提供高可用的系统给用户ÿ…...
Rust 最新版1.75.0升级记
升级方法 稳定版 C:\>rustup update stable info: syncing channel updates for stable-x86_64-pc-windows-msvc info: latest update on 2023-12-28, rust version 1.75.0 (82e1608df 2023-12-21) info: downloading component cargo 5.9 MiB / 5.9 MiB (100 %) 3.…...
使用 KubeSphere 与极狐GitLab 打造云原生持续交付系统
极狐GitLab 简介 极狐GitLab 是一个一体化的 DevOps 平台,可以简单理解为 GitLab 在国内的“发行版”。是由极狐(GitLab)公司推出的产品(极狐(GitLab)公司是以“中外合资3.0”模式成立的公司,在国内独立运营,为国内用户提供适合本…...
EasyExcel的追加写入(新增POI、CSV)
总结:目前市面上流行的2种 EasyExcel和POI都不是真正的对物理excel文件进行追加导入。只是在缓存里面追加,最后一次性写入,并不能解决内存占用问题。 1.EasyExcel2.POI3.CSV 无非就是下面两种逻辑: 1.for循环查询数据,…...
JetBrains 开发工具——免费教育许可申请流程
JetBrains 开发工具——免费教育许可申请流程 本文将详细介绍通过教育邮箱申请Free Educational Licenses. Free Educational Licenses地址 1.选择符合自己的申请入口 2.填写申请表单提交 官方指南 😃😃😃...
打造高性价比小程序,轻松降低成本
随着移动互联网的普及,小程序已经成为一个热门的应用开发方向。然而,对于许多企业和个人而言,制作一个小程序的费用却让人望而却步。那么,如何以最低的成本制作一款高性价比的小程序呢? 答案很简单,只需要找…...
mysql 索引优化查询
MySQL的索引可以提高数据库查询性能。下面是一些常用的MySQL索引优化技巧: 创建合适的索引:根据查询条件选择合适的列作为索引,并确保这些索引在WHERE子句中被使用到。 示例代码:CREATE INDEX idx_name ON table_name (column_nam…...
跟着cherno手搓游戏引擎【4】窗口抽象、GLFW配置
引入GLFW: 在vendor里创建GLFW文件夹: 在github上下载,把包下载到GLFW包下。 GitHub - TheCherno/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input修改SRC/premake5.lua的配置:12、13、15、36…...
Tomcat基础升华学习
01 What is Tomcat 1.1 Tomcat官网 官网 :https://tomcat.apache.org 1.2 Understand 为什么说Tomcat是Servlet之类技术的实现? 在我们的理解中,Tomcat可以称为Web容器或者Servlet容器 不妨通过手写一个Tomcat来推导一下 1.2.1 创建Tomc…...
一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读
论文题目:A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化,然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…...
GPDB - 高可用 - 流复制状态
GPDB - 高可用 - 流复制状态 GPDB的高可用基于流复制,通过FTS进行自动故障切换。自动故障切换需要根据primary-mirror流复制的各种状态进行判断。本节就聊聊primary-mirror流复制的各种状态。同样适用于PgSQL 1、WalSndState typedef enum WalSndState {WALSNDSTATE…...
最佳解决方案:如何在网络爬虫中解决验证码
Captcha(全自动区分计算机和人类的公开图灵测试)是广泛应用的安全措施,用于区分合法的人类用户和自动化机器人。它通过呈现复杂的挑战,包括视觉上扭曲的文本、复杂的图像或复杂的拼图等方式,要求用户成功解决这些挑战以…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
