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.mfbz.cn/a/496834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

原生JS上传大文件分片

代码&#xff1a;https://gitee.com/xproer/up6-vue-cli 1.引入up6组件 2.配置接口地址 接口地址分别对应&#xff1a;文件初始化&#xff0c;文件数据上传&#xff0c;文件进度&#xff0c;文件上传完毕&#xff0c;文件删除&#xff0c;文件夹初始化&#xff0c;文件夹删除&…

市场复盘总结 20240328

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 40% 最常用的…

代码随想录算法训练营第day60|84.柱状图中最大的矩形

84.柱状图中最大的矩形 力扣题目链接(opens new window) 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 思路&#xff1a; 为什么这么说呢&#xff…

第三十二天-PythonWeb主流框架-Django框架

目录 1.介绍 发展历史 介绍 2.使用 1.安装 2.创建项目 3.项目结构 4.启动 3.开发流程 1.设置ip可访问 2.创建模块 3.第一个页面 4.视图 5.include()参数 6.url与视图的关系 7.响应内容 4.视图处理业务逻辑 1.响应html 2.获取url参数 3.从文件响应html内容 …

趣味物理知识竞赛活动方案

为了丰富校园文化生活&#xff0c;创建格调高雅、学习氛围浓厚、青春气息浓郁的校园文化&#xff0c;注重多样性全方面的发展&#xff0c;推进了素质教育向纵深拓展&#xff0c;全面提升大学生的综合素质和精神文明建设全面发展。为进一步引导大学生了解前沿科技&#xff0c;普…

24计算机考研调剂 | 【官方】北京科技大学

北京科技大学 考研调剂招生信息 招生专业&#xff1a; 085404&#xff08;计算机技术&#xff09; 081200&#xff08;计算机科学与技术&#xff09; 调剂要求&#xff1a;&#xff08;调剂基本分数&#xff09; 我中心将在教育部“全国硕士生招生调剂服务系统”&#xff08…

面试算法-124-二叉树的最近公共祖先

题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它…

缓存雪崩问题及解决思路

实战篇Redis 2.7 缓存雪崩问题及解决思路 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 解决方案&#xff1a; 给不同的Key的TTL添加随机值利用Redis集群提高服务的可用性给缓存业务添加降…

Requests教程-20-sign签名认证

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节中&#xff0c;我们学习了requests的token认证方法&#xff0c;本小节我们讲解一下requests的sign签名认证。 在进行接口调用时&#xff0c;一般会要求进行签名操作&#xff0c;以确保接口的安全性和完整…

基于springboot实现课程作业管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现课程作业管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;课程作业管理系统当然也不能排除在外。课程作业管理系统是以实际运用为开发背景…

项目实战:电影评论情感分析系统

目录 1.引言 2.数据获取与预处理 3.构建文本分类模型&#xff08;使用LSTM&#xff09; 4.结果评估与模型优化 4.2.结果评估 4.2.模型优化 5.总结 1.引言 在本篇文章中&#xff0c;将通过一个完整的项目实战来演示如何使用Python构建一个电影评论情感分析系统。涵盖从数…

OSCP靶场--pyLoader

OSCP靶场–pyLoader 考点(信息收集CVE-2023-0297) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.178.26 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-28 09:14 EDT Nmap scan report for 192.168.178.26 Host is up…

二分图

数据结构、算法总述&#xff1a;数据结构/算法 C/C-CSDN博客 二分图&#xff1a;节点由两个集合组成&#xff0c;且两个集合内部没有边的图。换言之&#xff0c;存在一种方案&#xff0c;将节点划分成满足以上性质的两个集合。 染色法 目的&#xff1a;验证给定的二分图是否可…

房间采光不好怎么改造?这里有6个实用的解决方案!福州中宅装饰,福州装修

当装修中遇到房间采光不好的问题&#xff0c;可以从以下几个方面来解决&#xff1a; ①引入自然光源 尽可能减少光线阻碍物&#xff0c;例如可以考虑打通一些非承重墙&#xff0c;扩大窗户的面积&#xff0c;让阳光直接穿过阳台照射到室内。同时&#xff0c;也可以考虑在某些没…

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后&#xff0c;创建对象trainer时&#xff0c;需要从默认配置中获取类DetectionTrainer初始化所需的参数args&#xff0c;如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…

17.注释和关键字

文章目录 一、 注释二、关键字class关键字 我们之前写的HelloWorld案例写的比较简单&#xff0c;但随着课程渐渐深入&#xff0c;当我们写一些比较难的代码时&#xff0c;在刚开始写完时&#xff0c;你知道这段代码是什么意思&#xff0c;但是等过了几天&#xff0c;再次看这段…

图片标注编辑平台搭建系列教程(3)——画布拖拽、缩放实现

简介 标注平台很关键的一点&#xff0c;对于整个图片为底图的画布&#xff0c;需要支持缩放、拖拽&#xff0c;并且无论画布位置在哪里&#xff0c;大小如何&#xff0c;所有绘制的点、线、面的坐标都是相对于图片左上角的&#xff0c;并且&#xff0c;拖拽、缩放&#xff0c;…

从零开始学习在VUE3中使用canvas(六):线条样式(线条宽度lineWidth,线条端点样式lineCap)

一、线条宽度lineWidth 1.1简介 值为一个数字 const ctx canvas.getContext("2d"); ctx.lineWidth 6; 1.2效果展示 1.3全部代码 <template><div class"canvasPage"><!-- 写一个canvas标签 --><canvas class"main" r…

图像处理与视觉感知---期末复习重点(5)

文章目录 一、膨胀与腐蚀1.1 膨胀1.2 腐蚀 二、开操作与闭操作 一、膨胀与腐蚀 1.1 膨胀 1. 集合 A A A 被集合 B B B 膨胀&#xff0c;定义式如下。其中集合 B B B 也称为结构元素&#xff1b; ( B ^ ) z (\hat{B})z (B^)z 表示 B B B 的反射平移 z z z 后得到的新集合。…

冥想打坐睡觉功法

睡觉把手机放远一点&#xff0c;有电磁辐射&#xff0c;我把睡觉功法交给你&#xff0c;这样就可以睡好了。
最新文章