前后端项目打包对比——关于Spring Boot Maven Plugin配置的问题

Spring Boot Maven Plugin 配置详解

    • Spring Boot Maven Plugin 配置详解
      • 1. 添加插件到 `pom.xml`
      • 2. 插件配置
        • 2.1 基本配置
        • 2.2 配置参数详解
          • 默认行为说明
          • 简单配置示例
          • 为什么这样的配置能工作?
          • 进一步说明
        • 2.3 高级配置
      • 3. 使用插件打包应用程序
        • 3.1 打包成 JAR 文件
        • 3.2 打包成 WAR 文件
      • 4. 运行 Spring Boot 应用程序
        • 4.1 使用 Maven 运行
        • 4.2 使用生成的 JAR 文件运行
      • 5. 调试 Spring Boot 应用程序
        • 5.1 使用 Maven 调试
      • 6. 常见问题和解决方案
        • 6.1 无法解析配置
        • 6.2 应用程序无法启动
        • 6.3 调试问题

Spring Boot Maven Plugin 配置详解

在这里插入图片描述

Spring Boot Maven Plugin 是一个用于构建 Spring Boot 应用程序的 Maven 插件。它提供了多种功能,包括打包应用程序为可执行 JAR 或 WAR 文件,以及运行 Spring Boot 应用程序。以下是该插件的详细配置说明。

1. 添加插件到 pom.xml

首先,确保在项目的 pom.xml 文件中添加了 Spring Boot Maven Plugin:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.2.5</version> <!-- 确保版本与 Spring Boot 版本兼容 --></plugin></plugins>
</build>

2. 插件配置

2.1 基本配置

以下是插件的基本配置示例:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.example.Main</mainClass> <!-- 指定主类 --></configuration><executions><execution><goals><goal>repackage</goal> <!-- 重新打包 --></goals><configuration><!-- 可以在这里覆盖或添加额外的配置 --></configuration></execution></executions>
</plugin>
2.2 配置参数详解
  • mainClass:指定应用程序的主类,这是启动 Spring Boot 应用程序时需要的入口类。
  • layout:指定打包布局。可选值有 JARWARNONE。默认值为 NONE
    • JAR:生成一个包含所有依赖项的可执行 JAR 文件。
    • WAR:生成一个 WAR 文件,适用于部署到 Web 服务器。
    • NONE:不改变 Maven 默认的打包布局。
  • executable:布尔值,指示是否生成可执行 JAR 文件。默认值为 false
  • includesexcludes:用于指定包含或排除的依赖项。可以指定 groupIdartifactId
  • classifier:为生成的 JAR 文件添加分类器。这在生成多个不同配置的 JAR 文件时非常有用。
  • image:指定生成的 JAR 文件的名称。
  • requiresUnpack:指定是否需要在运行时解压 JAR 文件。默认值为 true

您是对的,对于 Spring Boot 项目来说,很多配置都是可选的,因为 Spring Boot Maven Plugin 提供了一些默认行为,使得在很多情况下,即使不进行额外配置也能正常打包和运行应用程序。

默认行为说明
  1. <packaging> 标签:在 Maven 中,<packaging> 标签定义了构建产物的类型。对于 Spring Boot 应用,通常使用 jar 作为打包类型。这是 Maven 项目的基本配置,并不是 Spring Boot Maven Plugin 的一部分。

  2. Spring Boot Maven Plugin:该插件的主要作用是处理 Spring Boot 应用的特定打包需求,比如嵌入依赖、生成可执行 JAR 等。以下是一些关键点:

    • 默认 layout:如果不显式指定 layout 属性,插件会根据 <packaging> 标签的值来决定打包布局。对于 jar 类型,它默认使用 NONE,这意味着它会保留 Maven 的标准打包布局。
    • 默认 mainClass:插件会尝试自动检测应用的主类。如果没有显式指定 mainClass 属性,它会查找带有 SpringBootApplication 注解的类。
    • 默认 excludes:Lombok 等一些依赖默认情况下会被排除在最终的 JAR 之外,因为它们在运行时不需要。
简单配置示例

以下是一个简单的 pom.xml 配置示例,它展示了如何使用 Spring Boot Maven Plugin 打包 Spring Boot 应用:

<project><!-- ... 其他配置 ... --><packaging>jar</packaging><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.2.5</version> <!-- 使用与 Spring Boot 版本相匹配的插件版本 --><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>
为什么这样的配置能工作?
  • 自动检测:Spring Boot Maven Plugin 会自动检测并处理许多常见的配置,比如查找主类、嵌入依赖等。
  • Maven 的灵活性:Maven 本身在处理 jar 打包类型时已经提供了一套完整的机制,Spring Boot Maven Plugin 主要是在此基础上增加了对 Spring Boot 应用的支持。
进一步说明
  • <goal>repackage</goal>:这个目标是 Spring Boot Maven Plugin 的一部分,用于重新打包应用,确保所有依赖都被正确嵌入到最终的 JAR 文件中。即使不显式指定这个目标,Maven 在执行 mvn package 时也会自动调用它。
  • <mainClass>:虽然可以不指定,但显式指定 mainClass 可以提供更好的控制,特别是在有多个入口类的情况下。
2.3 高级配置

以下是一些高级配置示例:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.example.Main</mainClass><layout>JAR</layout><executable>true</executable><classifier>exec</classifier><image>myapp</image><requiresUnpack>false</requiresUnpack><includes><include><groupId>non-optional</groupId><artifactId>non-optional</artifactId></include></includes><excludes><exclude><groupId>optional</groupId><artifactId>optional</artifactId></exclude></excludes></configuration><executions><execution><goals><goal>repackage</goal></goals><configuration><!-- 可以在这里覆盖或添加额外的配置 --></configuration></execution></executions>
</plugin>

3. 使用插件打包应用程序

3.1 打包成 JAR 文件

运行以下 Maven 命令将应用程序打包成 JAR 文件:

mvn clean package

这将执行 spring-boot-maven-pluginrepackage 目标,生成一个包含所有依赖项的可执行 JAR 文件。

3.2 打包成 WAR 文件

如果需要将应用程序打包成 WAR 文件,可以在 pom.xml 文件中设置 layout 属性为 WAR

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.example.Main</mainClass><layout>WAR</layout></configuration>
</plugin>

然后运行以下命令:

mvn clean package

这将生成一个 WAR 文件,可以部署到 Web 服务器。

4. 运行 Spring Boot 应用程序

4.1 使用 Maven 运行

Spring Boot Maven Plugin 允许你直接从命令行运行 Spring Boot 应用程序,而无需手动启动 JVM。要运行应用程序,可以使用以下命令:

mvn spring-boot:run

这将启动应用程序,并在控制台中显示应用程序的输出。

4.2 使用生成的 JAR 文件运行

如果生成了可执行 JAR 文件,可以使用以下命令运行应用程序:

java -jar target/myapp-0.0.1-SNAPSHOT.jar

这将启动应用程序,并在控制台中显示应用程序的输出。

5. 调试 Spring Boot 应用程序

5.1 使用 Maven 调试

要使用 Maven 调试 Spring Boot 应用程序,可以在 pom.xml 文件中添加以下配置:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><jvmArguments>-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n</jvmArguments></configuration>
</plugin>

然后运行以下命令:

mvn spring-boot:run

这将启动应用程序,并在端口 8000 上监听调试连接。

6. 常见问题和解决方案

6.1 无法解析配置

如果遇到类似以下错误:

Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.2.5:repackage (repackage) on project myapp: Unable to parse configuration of mojo org.springframework.boot:spring-boot-maven-plugin:3.2.5:repackage: Cannot convert 'PACKAGE_INTO_ONE_JAR' to Enum: No enum constant org.springframework.boot.maven.AbstractPackagerMojo.LayoutType.PACKAGE_INTO_ONE_JAR

这通常是因为 layout 属性的值不正确。确保 layout 属性的值是 JARWARNONE

6.2 应用程序无法启动

如果应用程序无法启动,检查以下可能的原因:

  • 依赖项缺失:确保所有依赖项都已正确添加到 pom.xml 文件中。
  • 主类错误:检查 mainClass 属性是否正确指向应用程序的主类。
  • 配置文件错误:检查应用程序的配置文件(如 application.propertiesapplication.yml)是否有错误。
6.3 调试问题

如果调试时遇到问题,检查以下可能的原因:

  • 调试参数错误:确保调试参数正确添加到 pom.xml 文件中。
  • IDE 配置:确保 IDE 正确配置了远程调试。

注意:本文的目的是提供一个详细的指南,但实际的配置和用法可能会根据你的具体项目需求和环境而有所不同。建议根据实际情况调整配置,并参考 Spring Boot 和 Maven 的官方文档获取更多信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch(六)— 全文检索

一、match系列查询 前面讲到的query中的查询&#xff0c;都是精准查询。可以理解成跟在关系型数据库中的查询类似。match系列的查询&#xff0c;是全文检索的查询。会通过分词进行评分&#xff0c;匹配&#xff0c;再返回搜索结果。 1.1 match 查询 "query": {&qu…

c++笔记4

目录 深度优先搜索DFS DFS的复杂度 DFS与递归 递归与暴力枚举 递归树 DFS与栈 DFS的搜索剪枝 搜索剪枝与优化 可行性剪枝 最优化剪枝 减少等效的分支 优化搜索顺序 搜索的记忆化 搜索的复杂度 大多时候&#xff0c;搜索的复杂度都是指数级的。各种剪枝方案&#…

Flink 技术与应用(一)

Flink技术与应用&#xff08;初级篇&#xff09; 起源 Apache Flink 是一个开源的大数据处理框架&#xff0c;其起源可以追溯到一个名为 Stratosphere 的研究项目&#xff0c;旨在建立下一代大数据分析引擎&#xff0c;2010 年&#xff0c;从 Stratosphere 项目中分化出了 Fl…

「Unity3D」场景中的距离单位Unit与相关设置PixelsToUnits、PixelsPerUnit

GameObject在场景的位置Position&#xff0c;并没有明确是什么具体单位——如&#xff1a;Transform的x、y、z&#xff0c;或RectTransform的PosX、PosY、PosZ。而RectTransform在面板上显示的Width和Height&#xff0c;也没有具体单位&#xff0c;其实并不是像素。 事实上&am…

百易云资产管理运营系统 comfileup.php 文件上传致RCE漏洞复现(XVE-2024-18154)

0x01 产品简介 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能,帮助企业优化资产配置,提升运营效率。 0x02 漏…

C++内存管理(候捷)第五讲 笔记

GNU C对allocators的描述 new_allocator 和malloc_allocator&#xff0c;它们都没有特别的动作&#xff0c;无非底部调用operator new和malloc。它们没有用内存池 区别&#xff1a;::operator new是可重载的 智能型的allocator&#xff0c;使用内存池&#xff0c;分一大块然后…

【PyTorch】基于YOLO的多目标检测项目(一)

【PyTorch】基于YOLO的多目标检测项目&#xff08;一&#xff09; 【PyTorch】基于YOLO的多目标检测项目&#xff08;二&#xff09; 目标检测是对图像中的现有目标进行定位和分类的过程。识别的对象在图像中显示有边界框。一般的目标检测方法有两种&#xff1a;基于区域提议的…

如何找到最快解析速度的DNS

如何找到最快解析速度的DNS DNS&#xff0c;即域名系统&#xff08;Domain Name System&#xff09;&#xff0c;是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使用户更方便地访问互联网&#xff0c;而不用记住能够被机器直接读取的IP数…

6.乳腺癌良性恶性预测(二分类、逻辑回归、PCA降维、SVD奇异值分解)

乳腺癌良性恶性预测 1. 特征工程1.1 特征筛选1.2 特征降维 PCA1.3 SVD奇异值分解 2. 代码2.1 逻辑回归、二分类问题2.2 特征降维 PCA2.3 SVD奇异值分解 1. 特征工程 专业上&#xff1a;30个人特征来自于临床一线专家&#xff0c;每个特征和都有医学内涵&#xff1b;数据上&…

7月25日JavaSE学习笔记

线程的生命周期中&#xff0c;等待是主动的&#xff0c;阻塞是被动的 锁对象 创建锁对象&#xff0c;锁对象同一时间只允许一个线程进入 //创建锁对象Lock locknew ReentrantLock(true);//创建可重入锁 可重入锁&#xff1a;在嵌套代码块中&#xff0c;锁对象一样就可以直接…

进销存系统开发,进销存源码解析,添加商品选择商品

点击添加商品信息&#xff08;可以&#xff09; (关键字范围&#xff1a;商品名称&#xff0c;简拼&#xff0c;条形码&#xff0c;SKU,规格&#xff0c;参数&#xff0c;尺寸&#xff0c;接口&#xff0c;CPU,品牌) function cwpd_selSaleGoodsNewMore_Vtax2024(domid,width…

sed利用脚本处理文件

一、sed是什么 sed 命令是利用脚本来处理文本文件。它可以依照脚本的指令来处理、编辑文本文件。主要用来自动编 辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 二、sed的原理 读入新的一行内容到缓存空间&#xff1b; 从指定的操作指令中取出第一条指令&…

【时时三省】(C语言基础)分支语句2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 多分支语句 if&#xff08;表达式1&#xff09; 语句1; else if&#xff08;表达式2&#xff09; 语句2; else 语句3; 如果表达式1成立语句1会执行 如果不成立表达式2执行 如果表达式2成…

【运维笔记】数据库无法启动,数据库炸后备份恢复数据

事情起因 在做docker作业的时候&#xff0c;把卷映射到了宿主机原来的mysql数据库目录上&#xff0c;宿主机原来的mysql版本为8.0&#xff0c;docker容器版本为5.6&#xff0c;导致翻车。 具体操作 备份目录 将/var/lib/mysql备份到~/mysql_backup&#xff1a;cp /var/lib/…

Multiview LM-ICP 配准算法

Multiview LM-ICP 配准算法针对一些大型的物体&#xff08;比如建筑物&#xff09;或者需要精细化建模的物体&#xff08;比如某个文物&#xff09;&#xff0c;仅仅进行成对的配准难以还原物体的全貌和细节。所以&#xff0c;多个视角的配准十分关键。 多视角的配准存在以下两…

[STM32]FlyMcu同时烧写BootLoader和APP文件-HEX文件组成

目录 一、前言 二、HEX文件的格式 三、组合HEX文件 四、使用FlyMcu烧录 一、前言 如题&#xff0c;BootLoader每次烧写都是全部擦除&#xff0c;当我们烧写APP程序的时候&#xff0c;BootLoader程序将不复存在&#xff0c;很多开发者或许只有USB转TTL模块&#xff0c;没有其…

grep命令搜索部分命令

首先 然后可以输入&#xff5c;以及grep命令 比如 bjobs| grep "3075*"bjobs| grep "3075"这个结果是这样的&#xff0c;

MYSQL 第四次作业

任务要求&#xff1a; 具体操作&#xff1a; 新建数据库&#xff1a; mysql> CREATE DATABASE mydb15_indexstu; Query OK, 1 row affected (0.01 sec) mysql> USE mydb15_indexstu; Database changed 新建表&#xff1a; mysql> CREATE TABLE student( ->…

遇到总条数count(*)返回不了数据

文章目录 前提1.准备数据1.1 建表语句1.2 插入数据 2.程序代码3.返回结果与分析4.验证 前提 获取h_user表中count(*)字段的值打印出来&#xff0c;打印出来是0&#xff0c;数据库中执行sql返回不是0。端点调试找到原因。下面先把数据库表数据及程序贴出来。 1.准备数据 1.1 …

CSS技巧专栏:一日一例 12 -纯CSS实现边框上下交错的按钮特效

CSS技巧专栏&#xff1a;一日一例 12 -纯CSS实现边框上下交错的按钮特效 大家好&#xff0c;今天我们来做一个上下边框交错闪动的按钮特效。 本例图片 案例分析 虽说这按钮给人的感觉就是上下两个边框交错变换了位置&#xff0c;但我们都知道border是没法移动的。那么这个按…