创建springboot项目的两种方式

创建springboot项目的两种方式

文章目录

  • 创建springboot项目的两种方式
    • 一、第一种方式:springboot作为parent
    • 二、第二种方式:import 依赖管理方式
    • 三、问题1:无法正确打包
    • 四、问题2:无法执行单元测试

一、第一种方式:springboot作为parent

我们一般情况下,创建一个单个的springboot项目时,在项目的pom.xml文件里,指定当前项目的parent为spring-boot-starter-parent即可,配置如下:

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.3</version><relativePath/> <!-- lookup parent from repository --></parent>

这种方式是最常用的,也是用spring starter,不管是网页版,还是IDE里的项目向导默认的方式。

但是这种方式对于多模块项目存在一个严重问题:就是所有的子模块都必须是spring boot项目。

这是非常荒谬的设计。比如一个项目结构如下:

└── hefrpc├── hefrpc-core├── hefrpc-demo-api├── hefrpc-demo-consumer├── hefrpc-demo-provider└── pom.xml

实际上只有子项目hefrpc-demo-consumer和hefrpc-demo-provider需要是springboot项目,分别有一个HefrpcDemoConsumerApplication和HefrpcDemoProviderApplication作为启动类。其他项目没有,也不需要这个类。

其中hefrpc-core只需要依赖spring即可。hefrpc-demo-api只有接口描述,不需要任何依赖。

此时,如果hefrpc作为整个项目的根节点,如果引入了springboot作为parent,那么默认下面的这四个子项目都是springboot项目。从而导致整体无法使用mvc package打包运行。

那么这种情况下怎么办呢?

一个自然而然的想法是,hefrpc不去引入springboot作为parent,而是让hefrpc-demo-consumer和hefrpc-demo-provider引入springboot。这个想法非常正确,直接可以解决上面的问题。

但是问题是:使用什么姿势来引入呢?

如果还是用parent来引入,带来的问题就是,hefrpc-demo-项目的父pom不是hefrpc,而是springboot,这就某种意义上破坏了项目结构(虽然它也可以运行)。这时候怎么办呢?

好在springboot&maven提供了另外一种选项。

二、第二种方式:import 依赖管理方式

拿上面的例子来说,我们可以让hefrpc-demo-provider的parent是一个跟springboot无关的,hefrpc这个常规的pom,然后在hefrpc-demo-provider的pom.xml中增加如下配置,从而实现本项目也是一个springboot项目的功能。

    <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.3</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

这段配置跟parent一样,把需要的springboot依赖都加了进来。

但是这么我们会发现,IDEA里KKrpcDemoApplication是可以编译运行的。

但是当我们用mvn package是无法编译运行的。打出来的jar也不是加入了所有依赖的fat jar。

三、问题1:无法正确打包

这是为什么呢?这是因为,import进来了依赖,但是打包编译的配置,build/plugin相关的东西没有搞进来。

所以需要添加如下配置来实现打包springboot项目。

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins>
</build>

这样maven运行时就知道使用spring boot的插件来打包,并做repackage处理,把依赖的jar都打到fat jar里去。

四、问题2:无法执行单元测试

这个时候虽然可以打包了,但是我们会发现mvn package时单元测试没有执行。提示没有找到测试类。

这个又是为什么呢?这是因为,缺少了执行单元测试的plugin配置,需要手工添加单元测试插件maven-surefire-plugin,以及对应于junit5的引擎surefire-junit-platform。

        <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.2.3</version><dependencies><dependency><groupId>org.apache.maven.surefire</groupId><artifactId>surefire-junit-platform</artifactId><version>3.2.3</version></dependency></dependencies></plugin>

如果使用的junit是4.x版本,需要这样配置:

			<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.2.3</version><dependencies><dependency><groupId>org.apache.maven.surefire</groupId><artifactId>surefire-junit4</artifactId><version>3.2.3</version></dependency></dependencies></plugin>

加上了上面的配置,就可以正确运行了。

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

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

相关文章

第十四章 MySQL

一、MySQL 1.1 MySql 体系结构 MySQL 架构总共四层&#xff0c;在上图中以虚线作为划分。 1. 最上层的服务并不是 MySQL 独有的&#xff0c;大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如&#xff1a;连接处理、授权认证、安全等。 2. 第二层的架构包括…

三个表的联合查询的场景分析-场景4:c表维护a和b表的id关联关系(一对多)

基础SQL演练&#xff0c;带详细分析&#xff0c;笔记和备忘。 目录 背景介绍 表数据 需求1&#xff1a;查询g表所有记录&#xff0c;以及关联的h的id 需求2&#xff1a;在需求1基础上&#xff0c;查出关联的h的其它字段&#xff08;name&#xff09; 需求3&#xff1a;在需…

API接口开发1688阿里巴巴官方API接口按关键词采集ALIBABA商品api接入演示

要按关键词采集阿里巴巴商品&#xff0c;你需要使用1688API接口。以下是一个简单的Python示例&#xff0c;展示了如何使用requests库调用阿里巴巴API并解析返回的数据&#xff1a; # coding:utf-8 """ Compatible for python2.x and python3.x requirement: pi…

AR智能眼镜解决方案_MTK平台安卓主板硬件芯片方案开发

AR智能眼镜&#xff0c;是一个可以让现场作业更智能的综合管控设备。采用移动互联网、大数据和云计算等技术&#xff0c;现场数据的采集与分析&#xff1b;同时实现前端现场作业和后端管理的实时连动、信息的同步传输与存储。让前端现场作业更加智能&#xff0c;后端管理更加高…

项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加O…

洛谷 1506.拯救oibh总部

思路&#xff1a;BFS 一道水题&#xff0c;其实就是对于flood fill的一种变形&#xff0c;我们直接用BFS就解决了&#xff0c;标志在围墙之外的0的状态&#xff0c;然后统计没有被遍历的0就行了。 上代码&#xff1a; #include<iostream> #include<stdio.h> #in…

【微服务篇】深入理解微服务注册中心与配置中心

注册中心 设计一个注册中心时&#xff0c;需要关注多个关键方面&#xff0c;以确保其稳定性、可靠性、性能和可扩展性。以下是一些重要的考虑因素&#xff1a; 服务发现机制&#xff1a;注册中心的核心功能是允许服务相互发现。这意味着当一个服务实例启动时&#xff0c;它需…

Python从零到一构建GPT模型

只用Python和 torch框架&#xff0c;从零到一构建GPT模型&#xff0c;对大语言模型入门&#xff0c;了解GPT的内部网络结构&#xff0c;是一个很好示例。 Build_GPT_from_Scratch.ipynb

C语言-printf和scanf的区别详解

fprintf&#xff08;指定的格式写到文件里面。适用于所有的输出流&#xff0c;可以打印在屏幕上面&#xff09;fscanf&#xff08;指定的格式读取出来&#xff0c;适用于所有的输入流&#xff09; fprintf&#xff08;指定的格式写到文件里面&#xff09; 两个函数是一样的 打开…

广和通发布基于高通高算力芯片的具身智能机器人开发平台Fibot

3月29日&#xff0c;为助力机器人厂商客户快速复现及验证斯坦福Mobile ALOHA机器人的相关算法&#xff0c;广和通发布具身智能机器人开发平台Fibot。作为首款国产Mobile ALOHA机器人的升级配置版本&#xff0c;开发平台采用全向轮底盘设计、可拆卸式训练臂结构&#xff0c;赋予…

黑马鸿蒙笔记2

1.图片设置&#xff1a; 1 加载网络图片&#xff0c;申请权限。 申请权限&#xff1a;entry - src - resources - module.json5 2 加载本地图片 ,两种加载方式 API 鼠标悬停在Image&#xff0c; 点击show in API Reference interpolation&#xff1a;看起来更加清晰 resou…

【JavaSE】java刷题--数组练习

前言 本篇讲解了一些数组相关题目&#xff08;主要以代码的形式呈现&#xff09;&#xff0c;主要目的在于巩固数组相关知识。 上一篇 数组 讲解了一维数组和二维数组的基础知识~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎…

网站怎么免费获取HTTPS证书?

申请HTTPS证书可以按照以下简单步骤进行&#xff1a; 1. 确定证书类型 根据你的网站性质和需求&#xff0c;选择合适的HTTPS证书类型。常见的有&#xff1a; - DV&#xff08;域名验证&#xff09;证书&#xff1a;适用于个人网站或小型项目&#xff0c;只需验证域名所有权&…

计算机网络—UDP协议详解:特性、应用

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀…

Linux---命令行参数

一、命令行参数 在介绍命令行参数前&#xff0c;我想问大家一个问题&#xff0c;在以前写C/C时&#xff0c;main 函数可不可以带参数&#xff1f; 答案是可以带的&#xff0c;int main(int argc, char* argv[]){}&#xff0c;但平时写代码时也证明了&#xff0c;main 函数的参…

算法——运动模型

智能驾驶中常用的速度计算算法包括基于GPS的速度计算、惯性测量单元&#xff08;IMU&#xff09;的速度计算、雷达测距的速度计算、视觉测距的速度计算等。这些算法可以单独使用或者结合使用&#xff0c;以提高速度计算的准确性和稳定性。 智能驾驶中常用的加速度计算算法包括…

uniapp对接极光推送(国内版以及海外版)

勾选push&#xff0c;但不要勾选unipush 国内版 网址&#xff1a;极光推送-快速集成消息推送功能,提升APP运营效率 (jiguang.cn) 进入后台&#xff0c;并选择对应应用开始配置 配置安卓包名 以及ios推送证书&#xff0c;是否将生产证书用于开发环境选择是 ios推送证书…

五款常用在线JavaScript加密混淆工具详解:jscrambler、JShaman、jsfack、ipaguard和jjencode

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具&#xff0c;包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析&#xff0c;帮助开发人员更好地保护和加密其 JavaScript 代码&#xff0c;提…

Linux学习教程 Linux入门教程(超全面 超详细)收藏这一篇就够了

Linux是什么&#xff1f; linux是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发能力已经得到业界的认可&#xff0c;目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上&#xff0c;很多软件公司考虑到开发成本都首选linux&#xff0c;在…

【NFS】NFS使用汇总

1. NFS介绍 NFS(Network File System)&#xff0c;网络文件系统&#xff0c;它可以让不同主机能够通过 TCP/IP 网络共享资源。它从宏观主体上简化来看&#xff0c;就是两部分&#xff1a;服务端和客户端。 服务端&#xff0c;可以认为它就是来存东西的&#xff0c;这个东西对…