Spring Boot(一)— Maven

 Maven是一个跨平台的项目管理工具,主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。通过其项目对象模型(POM),可以自动下载和管理项目所需的库和插件。

1 Maven

以上的pom.xml 包含了在开发中常用的标签与功能。

<?xml version="1.0" encoding="UTF-8"?>
<!---->
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!--POM模型版本--><modelVersion>4.0.0</modelVersion><!--被继承的父项目,注意,如果没有显示标注父项目,那么其默认会继承Maven内置的一个POM(称为Super POM)--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version></parent><!--项目信息:组织ID、构建ID、版本号、项目名称-->    <groupId>com.huangmingfu</groupId><artifactId>mvn_4</artifactId>	<version>0.1-SNAPSHOT</version><name>mvn_4</name><!--项目的打包方式,决定了项目构建的输出类型。常见的有:jar、war、pom、rar、maven-plugin、bundle等--><packaging>jar</packaging><!--定义属性,可以在pom中使用,也可以在pom包含的资源文件中使用--><properties><pom.directory>project-resources</pom.directory><pom.info>pom中的描述</pom.info></properties><!--构建项目需要的信息--><build><!--被编译过的应用输出目录(不是生成的jar文件所在的目录,该目录由对应的插件配置来指定)--><outputDirectory>./customTarget</outputDirectory><!--构建产生的所有文件存放的目录 --><directory>./customTarget</directory><!--产生的构件的文件名,默认值是${artifactId}-${version}。 --><finalName>生成文件</finalName><!--定义构建生命周期中的扩展点。可以定义多个extension--><extensions></extensions><!--项目相关的所有资源路径,例如属性文件。这些资源被包含在最终的打包文件里--><resources><!--项目相关的资源路径--><resource><!--资源存放路径,相对于pom路径--><directory>${pom.directory}</directory><!--资源的目标(输出)路径,相对于outputDirectory指定的目录--><targetPath>./</targetPath><!--是否使用参数值来代替参数名。 参数值取自properties元素或文件里配置的属性,文件在filters元素里列出--><filtering>true</filtering><!--包含的文件列表模式--><includes><include>*.txt</include><include>*.properties</include></includes><!--不包含的文件列表模式--><excludes><exclude>val*.properties</exclude></excludes></resource></resources><!--测试相关的所有资源路径--><testResources></testResources><!--当resource中的<filtering> 为true时生效。属性文件列表--><filters><!--路径相对于pom--><filter>${pom.directory}/val.properties</filter><filter>${pom.directory}/val2.properties</filter></filters><!--插件--><plugins><!--配置读取文件的编码--><plugin><groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-resources-plugin</artifactId>  <version>3.2.0</version>  <configuration>  <encoding>UTF-8</encoding>  </configuration> </plugin></plugins><!--与dependencyManagement元素类似,用于管理插件。 可以在其中声明插件及配置,但不会出发调用,只有当配置了plugin元素,--><!--并且其groupId和artifactId与其匹配时,才会影响实际的插件行为。常用于父项目确保所有子项目使用的插件版本保持一致--><pluginManagement></pluginManagement></build>  <!--配置文件,可以在构建中被激活,以改变项目的默认构建行为。通常用于处理跨环境差异(开发环境、生成环境等),在命令行中使用参数-P激活:mvn package -Pdev--><profiles><profile><!--该配置文件的唯一标识--><id>dev</id><!--定义什么情况下应该激活profile,可以基于系统属性、环境变量、文件存在性、操作系统、JDK版本等条件--><activation></activation>        <!--还可以包含properties、dependencies、build、modules、reporting等元素--> </profile></profiles><!--子模块,被构成项目的一部分。模块元素值是指向该模块的相对路径--><modules></modules><!--项目相关的依赖--><dependencies></dependencies><!--依赖管理,常用于父项目确保所有的子项目使用的依赖版本保持一致--><dependencyManagement></dependencyManagement>
</project>

1.1 基础信息

<version> 元素来指定项目的版本号。通常版本信息遵循:主版本.次版本.增量版本-里程碑版本。

主版本:项目的重大架构变更。

次版本:较大范围的功能增加或变化,以及bug修复。

增量版本:中大bug的修复。

里程碑版本:一个版本的里程碑,可能并不是一个非常稳定的版本,还需要很多测试。

Final

正式稳定版。

Beta

测试版。已经在开发团队内部进行了初步测试,但仍可能存在一些小问题,会提供给外部测试人员或团队进行更广泛的测试。

Alpha

内部测试版。通常处于开发阶段。用于内部进行初步功能测试和开发。

CR

候选发布版,会在公开发布之前进行最后的广泛测试。

SNAPSHOT

表示项目在开发中或不稳定的版本。 适用于开发和测试阶段。

表 常见的里程碑版本后缀

1.1.1 生命周期

Maven的生命周期是抽象的,本身不做任何实际的工作,实际工作由插件完成。

clean

清理项目,主要用于删除之前生成的数据。包含pre-clean、clean和post-clean三个阶段。

default

Maven的主要生命周期。包含了编译、测试、打包等一系列构建步骤。主要阶段有validate(验证工程是否正确、所需的资源是否可用)、compile(编译项目的源代码)、test(测试编译后的代码)、package(把已编译的代码打包成可发布的格式)、verify(运行所有检查)、install(将包安装至本地仓库,以供本地其他项目使用)

site

建立和发布项目站点。主要阶段有pre-site、site、post-site、site-deploy

表 Maven 的三套相互独立的生命周期

1.2 依赖

Maven中,依赖是指项目所依赖的库或框架,通常以jar包的形式存在。通过Maven坐标(groupId、artifactId、version)进行唯一标识。

Mavan支持多种依赖范围,用于控制依赖在项目不同阶段的可用性。

compile

默认范围,表示该依赖在编译、测试和运行阶段都可用。

test

仅在测试阶段可用。

runtime

在运行时可用,但在编译时不可用。

provided

该依赖在JDK或容器中已提供,无需在项目中打包。

system

与provided类似,但依赖的jar包必须显示地提供系统路径。

表 Maven依赖的范围

1.2.1 依赖的传递性

当项目A依赖与项目B,而项目B依赖项目C,那么A将自动继承项目B对项目C的依赖。

但是可能会导致一些问题,比如依赖冲突:

当项目中存在多个版本的相同依赖时,会根据一定的规则进行冲突解决。通常遵循“第一声明者优先”,即先声明的依赖版本将被使用。还可以使用<excusions>来排除特定的依赖,或者使用<dependencyManagement>来锁定依赖版本。

1.3 插件

插件是Maven的核心组成部分,实际上是一组用于执行特定任务的工具。可以自动化项目的构建、测试、打包、部署等过程。本质上是一个包含实现特定功能代码的jar包。

Maven的三大生命周期:clean、default和report,每个都包含了一系列的阶段(phase),而插件的目标(goal)则绑定在这些阶段上。当执行某个Maven命令时,实际上触发了绑定的插件目标。

maven-compiler-plugin

编译Java项目的源代码,并能确保Java代码与所指定的Java版本兼容,保证顺利地编译和执行。

maven-resources-plugin

处理项目中的资源文件,如复制资源文件到输出目录。可以在构建过程中复制和过滤资源文件。

maven-jar-plugin

将项目打包成JAR文件。

maven-war-plugin

将项目打包成WAR文件。

maven-install-plugin

将项目构建的包安装到本地Maven仓库中。

maven-dependency-plugin

用于分析和管理项目的依赖。可以执行复制依赖项到指定目录、列出项目依赖等任务。

表 Maven官方常见插件

1.4 打包

将项目打包成JAR或WAR文件时,会生成MANIFEST.MF文件(位于JAR文件等META-INFO目录下),用于描述打包等元数据信息(如程序入口类)。Java程序运行时,JVM读取并根据其中的配置信息执行响应的操作。

可以在maven-jar-plugin插件来配置其内容。

<packaging>标签指定打包方式,决定了文件输出类型(JAR、WAR等)。

1.4.1 <layout>

常用于插件的配置,用于定义打包过程的文件布局,不同的布局可能会影响如何组织JAR或WAR文件内的类、资源和依赖。

JAR

包含所有必要的依赖和启动脚本,生成的JAR文件将是可执行的。

WAR

与JAR类型类似,但适用Web应用。

ZIP

创建一个标准的ZIP文件,其内容和布局由用户自定义,不保证生成的ZIP文件是可执行的。

NONE

用于创建一个不包含任何启动脚本或布局的JAR或WAR文件。包含应用的类、资源及依赖。生成的文件不可执行。

CUSTOM

允许用户自定义布局。

表 <layout>的布局

2 spring-boot-starter-parent

用于构建Spring Boot应用程序的父项目,提供了一种标准化的方式来管理和配置Spring Boot应用程序的依赖项、插件和默认设置。

提供了以下功能(3.2.4版本):

1)默认使用Java17来编译项目。

2)UTF编码。

3)使用- parameters编译。

4)依赖管理。

5)repackage目标的执行,以便创建一个可执行的JAR或WAR文件。

6)Native配置文件。

7)filter资源处理。

8)合理的插件配置。包括Git提交ID和Shade插件的合理配置。

9)对应application.properties和application.yml的资源filter。

2.1 spring-boot-dependencies

不想使用spring-boot-starter-parent,但想使用其依赖管理来控制依赖版本时,可以使用spring-boot-dependencies依赖(是spring-boot-starter-parent的父级依赖)。可以设置项目的父pom为这个依赖,或者在依赖管理中引入这个依赖。

<dependencyManagement><dependencies><dependency><!-- Import dependency management from Spring Boot --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.4</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

2.2 依赖版本覆盖

当想在项目中覆盖某依赖在父POM中指定的版本时,可以在<properties>中覆盖该属性的值。

<properties><mysql.version>8.1.0</mysql.version>
</properties>

或者在<dependencyManagement>中覆盖该依赖。

<dependencyManagement><dependencies><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.32</version><exclusions><exclusion><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId></exclusion></exclusions></dependency></dependencies>
</dependencyManagement>

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

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

相关文章

KY7 质因数的个数(用Java实现)

描述 求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如1202*2*2*3*5&#xff0c;共有5个质因数。 输入描述&#xff1a; 可能有多组测试数据&#xff0c;每组测试数据的输入是一个正整数N&#xff0c;(1<N<10^9)。 输出描述&#xff1a; 对于每组数…

46.continue语句

目录 一.continue语句 二.视频教程 一.continue语句 continue语句的作用和break语句很像&#xff0c;break语句会跳出当前循环&#xff0c;而continue语句则是跳出本次循环&#xff0c;继续执行下一次循环。 举个例子&#xff1a; #include <stdio.h>void main(void)…

蓝桥杯练习题总结(三)线性dp题(摆花、数字三角形加强版)

目录 一、摆花 思路一&#xff1a; 确定状态&#xff1a; 初始化&#xff1a; 思路二&#xff1a; 确定状态&#xff1a; 初始化&#xff1a; 循环遍历&#xff1a; 状态转移方程&#xff1a; 二、数字三角形加强版 一、摆花 题目描述 小明的花店新开张&#xff0c;为了吸…

计算机组成原理 — 指令系统

指令系统 指令系统指令的概述指令的格式指令的字长取决于 操作数类型和操作种类操作数的类型数据在存储器中的存放方式操作类型 寻址方式指令寻址数据寻址立即寻址直接寻址隐含寻址间接寻址寄存器寻址寄存器间接寻址基址寻址变址寻址堆栈寻址 RISC 和 CISC 技术RISC 即精简指令…

软件测试之单元测试详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是单元测试&#xff1f; 单元测试是指&#xf…

「AI作曲家」Suno 使用 v3 在几秒钟内创作完整的两分钟歌曲

Suno 被誉为“音乐界的 ChatGPT”,它的独特之处在于能够根据简单的提示,自主创作包括歌词、人声和配器在内的完整音乐作品。更令人惊叹的是,你可以引导它精确地选择任何想要的音乐风格,从古老的三角洲蓝调到现代的电子寒潮,它还能灵活运用各种方言。 Suno 正在开启一个全…

【学习笔记】java项目—苍穹外卖day01

文章目录 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库环境搭建3.2.4 前…

1-java运算符试题

一、选择题&#xff08;10个&#xff09; 下列哪个是Java中的赋值运算符&#xff1f; A. B. - C. D. * 答案&#xff1a;C对于表达式a 5; b 10; a b * 2&#xff0c;其结果是&#xff1f; A. 15 B. 20 C. 25 D. 30 答案&#xff1a;C下列哪个符号表示短路逻辑与&#xff…

使用certbot为网站启用https

1. 安装certbot客户端 cd /usr/local/bin wget https://dl.eff.org/certbot-auto chmod ax ./certbot-auto 2. 创建目录和配置nginx用于验证域名 mkdir -p /data/www/letsencryptserver {listen 80;server_name ~^(?<subdomain>.).ninvfeng.com;location /.well-known…

【Linux】 centos7安装卸载SQL server(2017、2019)

一、安装配置 准备一个基础Linux配置&#xff1a; 内存为20GB 运行内存为2GB的系统&#xff08;数据库小于2GB安装不了&#xff09; 1、网络配置 我们需要进行网络的连接 进入 cd /ect/sysconfig/network-script/ 编辑文件ifcfg-ens33 vi ifcfg-ens33 Insert键进行编辑 把ONBOO…

2024最新Win系统下VSCode下载安装与配置C/C++教程

2024最新Win系统下VSCode下载安装与配置C/C教程 文章目录 2024最新Win系统下VSCode下载安装与配置C/C教程1、下载安装VSCode2、安装运行时环境GCGC的环境配置 3、安装VSCode插件4、配置程序调试环境4.1确定文件存储路径4.2新建文件夹【.vscode】4.3在.vscode文件夹里新建四个配…

学透Spring Boot — [二] Spring 和 Spring Boot的比较

欢迎关注我们的专栏 学透 Spring Boot 一、创建一个简单Web应用 本篇文章&#xff0c;我们将会比较 Spring 框架和 Spring Boot 的区别。 什么是 Spring? 也许你在项目中已经可以很熟练的使用 Spring 了&#xff0c;但是当被问到这个问题时&#xff0c;会不会犹豫一下&#…

轻松赚钱,精彩生活:上班族副业赚钱新攻略大揭秘!

薪水总是捉襟见肘&#xff0c;每月账单总让人倍感压力。你是否曾在静谧的夜晚&#xff0c;躺在床上&#xff0c;思索如何为家庭多赚一分钱&#xff1f;其实&#xff0c;你并不孤单。在这个充满机遇与挑战的时代&#xff0c;越来越多的人开始寻找副业&#xff0c;以期望让生活更…

QT控件之显示控件

Qt Designer显示窗口部件提供的面板中&#xff0c;提供了10种显示小部件 &#xff08;1&#xff09; Label标签 &#xff08;2&#xff09; Text Browser文本浏览器 &#xff08;3&#xff09; Graphics View图形视图 &#xff08;4&#xff09; Calendar Widget日历 &…

『大模型笔记』混合专家模型(Mixed Expert Models,简称 MoEs)

混合专家模型(Mixed Expert Models,MoE) 文章目录 1. 什么是混合专家模型?2. MoE的PyTorch示例代码2.1. 代码图示2.1. 理解torch.std2.1.1. 参数介绍2.1.1. 基本例子2.1.1. 矩阵的例子2.1.1. 用作损失的一部分3. MoE优缺点4. 参考文章

【Bug-ModuleNotFoundError: No module named ‘models‘】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 出现这个错误&#xff1a; 出现了ModuleNotFoundError: No module named models’的问题。 文件在Model…

【操作系统复习之路】操作系统概述(复习的同学有福啦)

长话短说&#xff0c;就记下笔记&#xff0c;期待期末90&#xff0c;随便希望能帮助到有需要的同学。 目录 一、操作系统的目标和作用 二、操作系统的发展过程 2.1 无OS 2.2 有OS 【1】批处理系统 【2】分时系统 【3】实时操作系统 【4】三种基本操作系统的比较&#…

域环境共享文件夹,容量配额管理

首先&#xff0c;我们先创建一个新的磁盘&#xff0c;必须在服务器关机的状态下创建&#xff0c;只有在关机状态下才能创建NVMe类型的磁盘。 打开此电脑&#xff0c;右击创建的磁盘&#xff0c;点击属性。 点击共享&#xff0c;点击高级共享。 将共享此文件夹勾选上&#xff0c…

【PSINS工具箱】无时间戳时,IMU数据解算与绘图(带源码)

背景 遇到一个例子&#xff0c;在IMU没有时间戳时&#xff0c;先根据采样周期&#xff08;或采样频率&#xff09;将时间戳补齐&#xff0c;然后再进行解算的程序。 要求&#xff1a;输入的imu信息前6列分别为&#xff1a;3列角速度、3列加速度。 程序源码 % 基于PSINS工具箱…

从代码到可执行到运行的整体流程与原理

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 本篇文章将会介绍&#xff0c;磁盘中是如何存储一个文件&#xff0c;磁盘中的文件是如何从磁盘中加载进内存&#xff0c;与进程又有怎样的关系&#xff0c;我们写的代码变成可执行程序执行起来时如何完成对文件的一系列…