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(全自动区分计算机和人类的公开图灵测试)是广泛应用的安全措施,用于区分合法的人类用户和自动化机器人。它通过呈现复杂的挑战,包括视觉上扭曲的文本、复杂的图像或复杂的拼图等方式,要求用户成功解决这些挑战以…...
OpenClaw深度沟通渠道-全景深度解构
OpenClaw深度沟通渠道-全景深度解构OpenClaw的渠道(Channels)是其“交互层”的核心,是用户意图与AI执行力的唯一交汇点。选择渠道,就是选择将AI能力注入您数字生活的哪个场景。以下分析将超越简单列表,深入每个渠道的技…...
通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势:对比传统方案在边缘计算场景下的潜力
通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI轻量化优势:对比传统方案在边缘计算场景下的潜力 最近在折腾一些边缘设备上的AI应用,发现一个挺有意思的现象:大家一提到部署大模型,脑子里蹦出来的第一个念头往往是“得找个性能强劲的服务…...
革命性超分辨率突破:OptiScaler让任何显卡实现4K级画质与帧率双提升
革命性超分辨率突破:OptiScaler让任何显卡实现4K级画质与帧率双提升 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 在…...
矩阵按键扫描技术对比:行列扫描与反转扫描的实战解析
1. 矩阵按键扫描技术入门指南 第一次接触矩阵按键时,我完全被那些交叉的行列线搞晕了。直到在某个深夜调试项目时,才突然理解了这个设计的精妙之处——它就像城市道路的十字路口,通过行列坐标就能精准定位每个按键位置。这种设计让16个按键只…...
OpenRocket完全指南:如何免费设计并仿真你的第一枚模型火箭[特殊字符]
OpenRocket完全指南:如何免费设计并仿真你的第一枚模型火箭🚀 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 你是否曾经梦想设计自…...
阿摩罗识CLAUDE.md内容的一些实践总结
环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单,下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...
Go gRPC 双向流通信实例
Go gRPC双向流通信实例解析 在现代分布式系统中,高效的双向通信是核心需求之一。gRPC作为Google开源的高性能RPC框架,支持双向流通信模式,允许客户端和服务端同时发送和接收多条消息。本文将以Go语言为例,介绍gRPC双向流通信的实…...
Wan2.1-UMT5一键部署教程:基于Python的AI视频生成WebUI快速搭建
Wan2.1-UMT5一键部署教程:基于Python的AI视频生成WebUI快速搭建 你是不是也对那些能根据文字描述生成视频的AI工具感到好奇?想自己动手搭建一个来玩玩,但又担心过程太复杂,被各种环境配置和依赖问题劝退? 别担心&…...
SeqGPT-560M实现YOLOv8目标检测:智能图像分析实战
SeqGPT-560M实现YOLOv8目标检测:智能图像分析实战 1. 引言 在计算机视觉领域,目标检测一直是个核心且具有挑战性的任务。传统的YOLOv8模型虽然检测速度快、准确率高,但在处理复杂场景时,往往需要额外的语义理解能力来提升检测精…...
效果惊艳:AI超清画质增强镜像3倍放大作品集展示
效果惊艳:AI超清画质增强镜像3倍放大作品集展示 1. 低清图像的困扰与AI解决方案 你是否遇到过这样的情况:翻出多年前的老照片想重温美好回忆,却发现画面模糊不清;从网上下载的图片用作素材时,放大后却满是马赛克&…...
