Maven项目父模块POM中是否应该包含SpringBoot打包插件(spring-boot-maven-plugin)

news2024/11/13 4:20:23

父模块POM是否包含SpringBoot打包插件

一、场景

一个基于SpringBoot的Maven父子模块的项目(一个父项目中包含多个子项目),父模块 POM文件中,是否应该包含打包需要的插件(spring-boot-maven-plugin)?
假设项目中的子模块,有些是应用服务,有些是自定义Starter。

二、结论

对于同时包含应用服务子模块、公共库模块和自定义starter模块的项目,不应该在父POM文件中,配置spring-boot-maven-plugin,只在需要执行Spring Boot的应用服务模块中使用它。

在这里插入图片描述

三、spring-boot-maven-plugin 插件配置

spring-boot-maven-plugin 插件,在POM中的配置代码:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

PS:<configuration>的配置,并不是必须的。本处是打包时排除Lombok,也就是打包应用时,不会将 Lombok 的 jar 文件包含在最终的应用程序中。Lombok 是用来生成源代码(编译时使用的),在运行时不需要包含它。

四、分析

父POM中包含spring-boot-maven-plugin 的可能理由

  1. 减少重复配置:将spring-boot-maven-plugin的配置放在父POM中可以避免在每个子模块中重复相同的配置,使得维护更容易。
  2. 统一版本控制:如果所有子模块都使用相同的插件版本,那么在父POM中指定插件版本可以确保一致性。
  3. 简化子模块POM:子模块的POM文件会更简洁,因为它们不需要显式地声明插件配置。

但是,需要注意的是,并非所有的子模块都需要使用spring-boot-maven-plugin。例如,如果你有一些子模块是库或starter,而不是可执行的应用服务,那么它们可能不需要打包成可执行的jar或者war包,因此不需要spring-boot-maven-plugin

对于自定义Starter

对于自定义的starter模块,通常它们并不需要spring-boot-maven-plugin来进行构建,因为它们只是提供依赖管理和自动配置功能。因此,在这些模块中不应该引入这个插件。

总结

  • 如果你的父POM仅包含了多个应用服务子模块(不包含公共库模块和自定义starter模块),并且这些服务需要一致的构建流程,那么在父POM中配置spring-boot-maven-plugin是一个好的实践。
  • 对于自定义starter或其他库模块,不应在这些子模块中使用spring-boot-maven-plugin
  • 对于同时包含应用服务子模块、公共库模块和自定义starter模块的项目,不应该在父POM文件中,配置spring-boot-maven-plugin,只在需要执行Spring Boot特定任务的应用服务模块中使用它。

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

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

相关文章

strcat函数的使用和模拟实现

目录 1.头文件 2.函数功能​编辑 3.注意事项&#xff1a; 4.strcat函数模拟实现&#xff1a; 方源一把抓住VS2022&#xff0c;催动春秋产的气息&#xff0c;顷刻炼化&#xff01; 1.头文件 strcat函数的使用&#xff0c;需要头文件 #include<string.h>2.函数功能 s…

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

Course1-Week1: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week11️⃣线性回归&#xff08;linear regression&#xff09; f w , b ( x ) w x b f_{w,b}(x) wx b …

【深度学习讲解笔记】前言

小编为AI专业的本科学生&#xff0c;最近入手了一本《深度学习讲解》的书&#xff0c;由于封面画了苹果&#x1f34e;&#xff0c;所以也叫苹果书&#xff0c;这本书目前在全网的热度很高。 本书是根据李宏毅老师讲授的《机器学习》课程编写的&#xff0c;作者是来自DataWhale…

SCI顶刊中“introduction”经典模板,建议收藏!

Introduction Introduction 的行文框架是一个从较宽泛的学术领域逐渐缩小到你的研究目标的过程。 1.研究背景和重要性 (Background AndImportance) • Mention of previous work on the subject • A statement of the importance of the subject 引言部分的第一段需要给出…

(Charles)如何抓取手机http的报文

抓包的目的&#xff1a; 发现bug需要定位要抓包 检查数据传输的安全性 接口测试遇到需求文档不全要抓包 抓包主要抓取的是http协议&#xff08;https协议&#xff09;的报文 http协议规范客户端和服务端的数据传输格式&#xff0c;是一个标准和规范 每个http连接包括请求消息和…

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya&#xff08;不是本人&#xff0c;claude AI&#xff09;在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容&#xff1a; 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用&…

CSP-J基础之数学基础 杨辉三角 一篇搞懂

文章目录 前言杨辉三角介绍杨辉三角的结构数学中的形式杨辉三角的性质 杨辉三角进行左对齐杨辉三角的递推公式编程实现杨辉三角总结 前言 杨辉三角是数学中一个非常有趣且重要的概念。它不仅在组合数学中扮演着重要角色&#xff0c;还在许多数学问题的解决中提供了有力的工具。…

【重学 MySQL】二十、运算符的优先级

【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级&#xff08;由高到低&#xff09;注意事项示例 在 MySQL 中&#xff0c;运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…

Rust运算符

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) https://blog.csdn.net/brucexia/category_12779443.html 前面已经学习了变量和常量&#xff0c;本节开始对它们进行操作&#xff0c…

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站&#xff0c;手机流量可以访问IPV6网络的服务&#xff0c;为什么不在电脑搭建Home Assistant&am…

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为&#xff1a; 创建一个socket服务端&#xff0c;监听socket通道&#xff0c;并打印出socket通道中的内容。 创建两个socket客户端&#xff0c;向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void m…

Linux服务器应急响应(上)

目录 介绍步骤 介绍 网页篡改&#xff0c;即攻击者故意篡改网络上传送的报文&#xff0c;通常以入侵系统并篡改数据、劫持网络连接或插入数据等形式进行。 网页篡改一般有明显式和隐藏式两种。明显式网页篡改指攻击者为炫耀自己的技术技巧&#xff0c;或表明自己的观点实施的网…

《深入浅出WPF》读书笔记.11Template机制(下)

《深入浅出WPF》读书笔记.11Template机制(下) 背景 本文主要讲datatemplate和contenttemplate的联合使用&#xff0c;以及style的解析。 《深入浅出WPF》读书笔记.11Template机制(下) 代码 两者的作用域范围 datatemplate和contenttemplate的关系 两者的应用 指定目标类型…

Qt常用控件——QPushButton

QPushButton介绍 QWidget中涉及到的各种属性、函数、使用方法&#xff0c;对于Qt的各种控件都是有效的 使用QPushButton表示一个按钮&#xff0c;继承自QAbstracButton&#xff0c;这个类是一个抽象类 抽象类&#xff1a;包含纯虚函数&#xff0c;无法实例化出对象&#xff0c;…

第四届长城杯部分wp

还是太菜了&#xff0c;要经常练了 1.BrickGame 通过游戏就可以得到flag 2.SQLUP 一道文件上传的题目&#xff0c;在登陆页面我用admin和1登陆成功了&#xff0c;但是按照正常的应该是要爆破&#xff0c;用bp爆破得到下面的页面 登陆成功后&#xff0c;点击头像就可以进行文…

前端 PDF 预览技巧:标签 vs 插件,如何优雅地展示 PDF 文件

前言 pdf 作为一种常用的文档格式&#xff0c;相信很多同学都在项目中遇到过需要预览 pdf 文件的情况。其实实现的方式有很多&#xff0c;包括传统的标签 iframe 或 embed 方式&#xff0c;也可以运用一些插件&#xff0c;例如 pdf.js、vue-pdf 等等&#xff0c;本文将带大家一…

FastJson、Jackson、Gson、Hutool,JSON解析哪家强?JMH基准测试来排行

首发公众号:【赵侠客】 引言 在前面《释放你九成的带宽和内存&#xff1a;GZIP在解决Redis大Key方面的应用》一文中我使用GZIP算法对JSON格式数据进行了压缩&#xff0c;可以减小88%的空间&#xff0c;文中也提到了目前JSON格式在我们项目中应用的非常广泛几乎无处不在。压缩J…

整合Redis和RedisCacheManger

整合redis springboot在现在的版本中操作Redis数据库用到了lettuce&#xff0c;而不是Jedis&#xff0c;他们各有各的特点。Jedis以Redis命令作为方法名称&#xff0c;学习成本低&#xff0c;简单实用。但是Jedis实例是线程不安全的&#xff0c;多线程环境下需要基于连接池来使…

Java实现一个简单的本地群聊。可以多开Client。

网络编程也有趣的&#xff0c;Java中有对系统网络IO操作的封装包&#xff1a;Socket。现在我们在本地电脑&#xff08;网络&#xff09;用它来模拟一个简单的群聊功能&#xff0c;以便能更好地对网络编程进行深刻的理解。 "Client"去连接"Host",可同时多有…

JavaEE 第23节 TCP的流量控制与阻塞控制详解

目录 前言&#xff08;必读&#xff09;1、滑动窗口背景运行机制 2. 流量控制作用实现机制关键目标 3. 拥塞控制作用实现机制作用 4. 流量控制和拥塞控制的区别作用对象不同触发条件不同控制方式不同 5.总结 前言&#xff08;必读&#xff09; 流量控制&#xff08;Flow Contr…