SpringBoot Maven 项目 pom 中的 plugin 插件用法整理

server/2025/1/20 1:49:04/

把 SpringBoot Maven 项目打包成 jar 文件时,我们通常用到 spring-boot-maven-plugin 插件。

前面也介绍过,在 spring-boot-starter-parent POM 和 spring-boot-starter POM 中都有插件的管理,现在我们就撸一把构建元素中插件的用法。

mavenplugin__8">一、spring-boot-maven-plugin 插件的使用

1、项目中 spring-boot-maven-plugin 插件的使用

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">  
<modelVersion>4.0.0</modelVersion>
<parent><!--父项目--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent>
<!--项目基本信息、父项目信息、依赖、自定义属性等等...--><build><!--构建元素--><plugins><!--插件引入--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><finalName>xxx</finalName> <!--jar的名称--></build>
</project>

project 标签指定项目的声明。modelVersion 标签指定 POM 模型的版本。目前使用的是 4.0.0 版本。这是 Maven 项目的根元素,定义了项目模型的版本。

parent 标签指定父项目信息,这里继承了 spring-boot-starter-parent 的 pom。

build 标签指定项目的构建配置。它包含了多个子元素,如 、 和 < finalName > 等等。

spring-boot-maven-plugin 插件用于打包和运行 Spring Boot 应用。

2、spring-boot-starter POM 中的 spring-boot-maven-plugin

img

在这个 pom 里对 spring-boot-maven-plugin 插件的版本进行管理。

3、spring-boot-starter-parent POM 中的 spring-boot-maven-plugin

img

id 标签指定了此执行的唯一标识符 repackage。
goals 标签内定义了执行目标 goal 为 repackage。
mainClass 标签通过占位符 ${start-class} 来指定项目的主类,Maven 会替换这个占位符为实际的主类。

从上面的文件可以看出来,在 spring-boot-starter-parent POM 中对 spring-boot-maven-plugin 插件的管理更加细化了。

由于在项目的 pom 里,我们继承了 spring-boot-starter-parent 的 pom,spring-boot-starter-parent 又继承了 spring-boot-starter 的 pom,因此在项目的构建部分,我们可以直接引用 spring-boot-maven-plugin 插件,而不必再重复管理该插件的版本信息和一些构建信息。

二、<plugin> 插件

元素用于配置构建过程中使用的各种插件,它可以包含一个或多个 < plugin> 标签。

元素是在构建生命周期的不同阶段执行的工具,它们可以执行各种任务,例如编译代码、运行测试、打包项目、生成报告等。

插件子元素:

1、groupId: 指定插件的 groupId,标识插件的组织或提供者。
2、artifactId: 指定插件的 artifactId,标识插件的具体名称。
3、version: 指定插件的版本号。
4、extensions: 可选子元素。指示插件是否为 Maven 的核心扩展插件。默认值为 false。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><!-- extensions 默认为 false -->
</plugin>

如果未显式指定 extensions 属性,或者将其设置为 false,则表示插件不是 Maven 的核心扩展插件。这意味着 Maven 将插件作为标准插件处理,它们遵循标准的插件生命周期和行为。

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.6.0</version><extensions>true</extensions>
</plugin>

如果将 extensions 属性显式设置为 true,则表示插件是 Maven 的核心扩展插件。这意味着插件可以在 Maven 构建中扩展或修改 Maven 的核心行为,通常用于提供额外的功能或集成。

5、dependencies: 指定插件在执行过程中所需的依赖项。
包含一个或多个 元素,用于引入插件在执行过程中所需的依赖项。

6、executions: 描述插件执行的阶段和配置。

这个标签用于定义一个或多个插件的执行配置。

每个 < execution > 标签定义一个执行单元。可以在不同的构建阶段执行多个目标。

package jar jfxnative

<phase>package</phase>:指定了 Maven 生命周期的 package 阶段。在 Maven 的标准构建生命周期中,package 阶段用于将编译后的代码打包成可分发格式(如 JAR 文件)。

<goal>jar</goal>:指示 Maven 在 package 阶段创建一个 JAR 文件。这个目标是由 Maven 的 maven-jar-plugin 插件提供的。

<goal>jfxnative</goal>: 指示 Maven 在 package 阶段创建一个本地可执行文件(如 EXE 文件)。这个目标是由 javafx-maven-plugin 插件提供的。jfxnative 目标会使用 javapackager 或 jpackage 来生成本地可执行文件。

7、configuration: 用于配置插件在执行过程中的具体行为和参数,以定制插件的功能和行为。

configuration 的两大作用:

7.1、传递参数: 插件可能需要某些参数来正确执行其功能。这些参数可以通过 configuration 元素传递给插件。

    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin>

<source>< target>: 传递给编译插件的 Java 版本信息。

在上述例子中,<configuration> 元素用于向 Maven 编译器插件传递编译源代码的 Java 版本信息。

7.2、定制插件行为: 不同的插件支持不同的配置参数。通过 configuration 属性,你可以定制插件的行为以适应项目的特定需求。

7.2.1、基本类型参数: 如字符串、整数等,用于传递简单的配置信息。

<configuration><outputDirectory>target/classes</outputDirectory><verbose>true</verbose><includeSystemScope>true</includeSystemScope>
</configuration>

outputDirectory 标签指定插件输出的目录。
verbose 标签控制是否输出详细信息。
includeSystemScope 标签用于指定是否包括系统范围的依赖项(system scope dependencies)。系统范围的依赖项是那些指定了本地文件路径的依赖项,这些依赖项通常是一些特殊的、不可通过 Maven 仓库获取的库。

7.2、复杂类型参数: 如对象或嵌套配置,用于传递更复杂的配置信息。

<configuration><compilerArguments><arg>-Xlint:unchecked</arg></compilerArguments><encoding>UTF-8</encoding>
</configuration>

compilerArguments 标签指定传递给编译器插件的编译参数。
encoding 标签指定源文件编码格式。

7.3、集合类型参数: 用于传递列表或数组等复杂的数据结构。

<configuration>   
<skipTests>true</skipTests><includes><include>**/*Tests.java</include></includes><excludes><exclude>**/SlowTests.java</exclude></excludes>
</configuration>

includes 标签指定哪些测试类被包括在测试中。
excludes 标签指定哪些测试类被排除在测试外。
skipTests 标签用于跳过测试执行。

plugin 标签里的子元素太多了,看不完根本看不完。还是用了再了解吧。

三、dependency 和 plugin 主要区别

dependency 和 plugin 有很多相似的地方,plugin 标签里也可以包含一个或多个 dependency 标签。

img

四、构建阶段

在 Maven 项目中,构建过程是一组定义明确的活动或步骤,用于生成项目的最终输出(如 JAR 或 WAR 文件)。构建过程本身包括编译、测试、打包等多个阶段,但它不完全属于编译、测试或运行这三个阶段中的任何一个,而是涵盖了这些阶段中的一些或全部,以及其他额外的步骤。

1、编译阶段(Compile)

这是构建过程的开始,源代码被编译成字节码文件(.class 文件)。这个阶段对应于 Maven 的 compile 生命周期阶段。

2、测试阶段(Test)

在这一阶段,项目的单元测试被执行,以验证代码的功能性。这通常对应于 Maven 的 test 生命周期阶段。测试阶段通常发生在编译阶段之后。

3、打包阶段(Package)

编译后的字节码和资源文件被打包成可分发的格式,如 JAR、WAR 或 EAR 文件。这一阶段对应于 Maven 的 package 生命周期阶段。

4、验证阶段(Verify)

在这一阶段,对打包的结果进行质量检查,可能包括运行集成测试、静态代码分析等。这一步骤确保打包的产品符合质量标准。

5、安装阶段(Install)

在这一阶段,打包的项目被安装到本地 Maven 仓库中,以便在该机器上的其他项目中使用。

6、部署阶段(Deploy)

在这一阶段,最终的包被上传到远程仓库中,供其他开发者和项目使用。

7、构建与编译、测试、运行的关系
编译:构建的一部分,确保代码无误并转换成机器可执行的形式。

测试:也是构建的一部分,用于验证功能和性能。

运行:通常指在开发完成后,产品被部署并实际运行的阶段。构建过程负责生成运行所需的所有代码和资源,但实际的运行通常发生在构建过程之外,特别是在生产环境中。

总的来说,构建过程是项目开发周期中非常关键的一部分,涵盖了从代码编译到产品部署的多个步骤,确保软件产品能够按预期构建和发布。


http://www.ppmy.cn/server/159776.html

相关文章

第三章、python中的对象、变量、标识符、作用域、引用(调用)及地址的概念(3.1-3.2)------内存地址、创建对象、对象的类型及对象的划分问题

第三章、python中的对象、变量、标识符、作用域、引用(调用)及地址的概念 本章讲述编程中对象、变量、地址的基本概念及其之间的关系,可迭代对象、可变对象、不可变对象的特点。

FastGPT结合New-api,遍享各类大模型

​​欢迎关注【AI技术开发者】 ​ 上文中&#xff0c;我们成功搭建了FastGPT服务和New-api服务 我们现在需要配置New-api服务&#xff0c;使用New-api来同时使用多个厂商的大模型服务&#xff0c;如豆包、通义千问、混元、文心一言、Kimi等模型 首先&#xff0c;我们需要修改…

Python毕业设计选题:基于python的酒店推荐系统_django+hadoop

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 酒店客房管理 客房类型管理 客房预定管理 用户…

Redis - 环境搭建

目录 在Ubuntu上安装Redis在Centos上安装RedisCentos7Centos8 版本&#xff1a;使用Redis5系列 操作系统&#xff1a;在Linux中进行安装&#xff08;Redis官方不支持Windows版本&#xff09; 在Ubuntu上安装Redis 更新软件包&#xff1a; sudo apt-get update搜索相关软件包…

深度学习中的张量 - 使用PyTorch进行广播和元素级操作

深度学习中的张量 - 使用PyTorch进行广播和元素级操作 元素级是什么意思&#xff1f; 元素级操作在神经网络编程中与张量的使用非常常见。让我们从一个元素级操作的定义开始这次讨论。 一个_元素级_操作是在两个张量之间进行的操作&#xff0c;它作用于各自张量中的相应元素…

发布工具包 到npm 服务

操作步骤如下&#xff1a; 1. 创建文件夹&#xff0c;并创建文件 index.js&#xff0c; 在文件中声明函数&#xff0c;使用 module.exports 暴露 2. npm 初始化工具包&#xff0c;package.json 填写包的信息 (包的名字是唯一的) 3. 注册账号 https://www.npmjs.com/signup …

实现类似Excel的筛选

以下是在 DataGridView 中实现类似 Excel 下拉筛选功能的解决方案&#xff1a; 解决思路 为 DataGridView 的列添加 DataGridViewComboBoxColumn 类型的列&#xff0c;用于显示下拉筛选列表。为 DataGridView 的 ColumnHeaderMouseClick 事件添加处理程序&#xff0c;当用户点…

图像分类、目标定位与目标检测的区别详解:定义、工作原理、应用场景

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…