SSM基础专项复习4——Maven项目管理工具(1)

news2025/3/17 14:24:23

系列文章

1、SSM基础专项复习1——SSM项目整合-CSDN博客

2、SSM基础专项复习2——Spring 框架(1)-CSDN博客

3、SSM基础专项复习3——Spring框架(2)-CSDN博客

文章目录

系列文章

1. Maven 的概念

1.1. 什么是 Maven

1.2. 什么是依赖管理

 1.3. 什么是项目构建

1.4. Maven 的应用场景

 1.5. 为什么使用 Maven

 1.6. Maven 模型

2. 初识 Maven

2.1. Maven 安装

2.1.1 Maven 安装目录分析

2.2 按照约定创建 Maven 项目目录

2.3 Maven 项目视图

3、 Maven 进阶

3.1. pom.xml 文件

3.2. 坐标

3.2.1. 坐标的概念

3.2.2. 坐标的意义

3.2.3. 坐标的含义

3.3. 依赖

3.3.1. 依赖的意义

3.3.2. 依赖的使用

3.4. 依赖范围

 3.5. 依赖传递和可选依赖

3.5.1. 依赖传递

3.5.2. 依赖范围对传递依赖的影响 

3.5.3. 依赖阻断 

 3.5.4. 可选依赖

4、仓库 

4.1 仓库的概念

4.2  依赖搜索顺序


1. Maven 的概念

1.1. 什么是 Maven

maven翻译为“专家”,“内行” 

         Maven 是跨平台的项目管理工具。主要服务于基于 Java 平台的项目构建,依赖管理和项目信息管理。 

什么是理想的项目构建

高度自动化,跨平台,可重用的组件,标准化的

什么是依赖?为什么要进行依赖管理?

在软件开发或其他项目管理情境中,依赖指的是一个组件、模块、库、服务或任务等对其他元素的依靠关系。自动下载,统一依赖管理。

 A1.0 依托于 B 2.0 依托于 C3.0

在 Maven 项目中,依赖通过在 pom.xml 文件里的 <dependencies> 标签下声明。每个依赖使用 <dependency> 子标签定义,包含 groupIdartifactId 和 version 这三个基本坐标,以此来唯一标识一个依赖项。

有哪些项目信息

项目名称描述等,开发人员信息,开发者信息等

1.2. 什么是依赖管理

对第三方依赖包的管理,可以连接互联网下载项目所需第三方 jar 包。对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。

我们可以在maven的中央仓库找到对应的jar包

maven仓库地址:https://mvnrepository.com/

 

 1.3. 什么是项目构建

项目构建:是一个从编写源代码到编译、测试、运行、打包、部署的过程。

传统项目和 maven 项目构建的两种方式

传统项目: 打开 Idea 编写源代码和配置文件,对源代码进行编译,可以使用Junit 进行单元测试,把项目打成 war 包,部署到 Tomcat 服务器中运行。

maven 项目: maven 将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。

清理 --> 编译 --> 测试 --> 报告 --> 打包 --> 部署

使用maven的好处: 可以通过命令完成项目构建。(测试:使用 mvn tomcat:run 的命令来发布运行项目)maven 对每个构建阶段进行规范,有利于大型团队协作开发。

1.4. Maven 的应用场景

         maven 的应用场景,开发人员只要按着 maven 标准的目录结构进行开发即可,然后提交代码。在测试服务器上拉取 Java 源码,然后可以使用 maven 的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。

 1.5. 为什么使用 Maven

IDE?Eclipse?IDEA?

  • 手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
  • 每个人的 IDE 配置都不同,很容易就出错出现本地代码换个地方编译

Ant?

  • 没有一个约定的目录结构
  • 必须明确让 ant 做什么,什么时候做,然后编译,打包
  • 没有生命周期,必须定义目标及其实现的任务序列
  • 没有集成依赖管理

Ant 是一个基于 Java 的构建工具,由 Apache 软件基金会开发和维护。它主要用于自动化软件项目的构建过程,比如编译源代码、运行测试、生成文档以及打包部署等任务

 Maven?

  • 拥有约定,知道你的代码在哪里,放到哪里去
  • 拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
  • 只需要定义一个 pom.xml,然后把源码放到默认的目录,Maven 帮你处理其他事情
  • 拥有依赖管理,仓库管理

 1.6. Maven 模型

2. 初识 Maven

2.1. Maven 安装

见我的另一篇博客

Maven的安装——给Idea配置Maven_idea 安装maven-CSDN博客文章浏览阅读2.4k次,点赞31次,收藏26次。Maven是一个开源的项目管理工具,它主要用于Java项目的构建、依赖管理和项目生命周期管理。_idea 安装maven https://blog.csdn.net/2301_78566776/article/details/143890988?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220e9d5300004d38107b49caf0c8057837%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=0e9d5300004d38107b49caf0c8057837&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-143890988-null-null.nonecase&utm_term=maven&spm=1018.2226.3001.4450

2.1.1 Maven 安装目录分析

bin:含有 mvn 运行的脚本

boot:含有 plexus-classworlds 类加载器框架

conf:含有 settings.xml 配置文件

lib:含有 Maven 运行时所需要的 java 类库 LICENSE.txt, NOTICE.txt, README.txt 针对 Maven 版本,第三方软件等简要介绍

2.2 按照约定创建 Maven 项目目录

src/main/java —— 存放项目的.java 文件

src/main/resources —— 存放项目资源文件,如 spring, mybatis配置文件

src/test/java —— 存放所有测试.java 文件,如 JUnit 测试类

src/test/resources —— 测试资源文件

target —— 项目输出位置

pom.xml——配置依赖的位置

2.3 Maven 项目视图

Maven 项目视图主要用于查看该 maven 项目的各项属性,同时也可以进行一些常见的maven 的操作,比如打包,清理,测试等等;

3、 Maven 进阶

3.1. pom.xml 文件

         就像 Make 的 MakeFile、Ant 的 build.xml 一样,Maven 项目的核心是pom.xml。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

3.2. 坐标

3.2.1. 坐标的概念

         在 Maven 中 坐 标 是 构 件 的 唯 一 标 识 , Maven 坐 标 的 元素包括groupId、artifactId、version、packaging、classifier。上述 5 个元素中,groupId、artifactId、version 是必须定义的,packaging 是可选的 ( 默认为jar )。

3.2.2. 坐标的意义

Maven 世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范 拥有了统一规范,就可以把查找工作交给机器

3.2.3. 坐标的含义

groupId:组织标识,一般为:公司网址的反写+项目名

artifactId:项目名称,一般为:项目名-模块名

version:版本号 形式为 0.0.1-SNAPSHOT:

                第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个0 表示小版本号

                SNAPSHOT -- 快照版本,ALPHA -- 内侧版本,BETA -- 公测版本,RELEASE -- 稳定版本,GA -- 正式发布

packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war,...

clissifier:用来帮助定义构件输出的一些附属构件。

3.3. 依赖

3.3.1. 依赖的意义

        当编写 Java 代码时,我们总是需要一些库,例如,做单元测试我们需要JUnit库。对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。不同的项目需要不同版本的库。 保持项目最新的库 JAR 文件的正确版本不是一个容易的任务。

        每个外部 JAR 可能还依赖于其他外部 JAR 文件等。以递归方式下载所有这些外部依赖JAR 文件并确保下载正确的版本是一项巨大的任务。

        当项目越来越大,我们将需要越来越多的外部依赖。

        Maven 将下载它们并将它们放在您的本地 Maven 存储库中。 我们可以在 POM 文件中的 dependencies元素内指定依赖关系。

3.3.2. 依赖的使用

        例如我们的项目需要进行单元测试,则需要使用到 junit-4.9.jar 包,使用maven引用该依赖的方式如下:

属性说明:

  •         三维坐标:引用依赖包的三维坐标,用来定位该依赖包;
  •         scope: 控制该依赖包在什么情况下会被加到 classpath 中;

3.4. 依赖范围

Maven 项目在开发工程中有三套 classpath

主代码:main 下面的都是主代码在编译的时候的依赖

测试代码:test 下是测试代码编译的时候的依赖

运行时:main 代码在运行的时候对包的依赖

依赖范围的使用,通过在引用第三方依赖时的标签进行设置,例如:

共 6 种 scope,包括:compile、provided、runtime、test、system、import。例如上图的 junit,只在测试中使用,则选择 test 即可,默认为 compile

  1. Compile:编译依赖范围。默认使用此依赖范围,其下的 maven 依赖,对于编译,测试,运行 classpath 都有效。
  2. Test:测试依赖范围。只对测试 classpath 有效,编译主代码或运行项目时无法使用此依赖。典型例子如 junit。
  3. Provided:已提供依赖范围。其对于编译与测试 classpath 有效,运行时无效。如在 web 开发时,只有在编译和测试时才用到 servlet-api,将其设置为此范围,在运行时 servlet-api 由 web 容器提供,无须依赖。并且在打war 包时,此范围的依赖不会打在 WEB-INF/lib 下。
  4. Runtime:运行时依赖范围。与 provided 相对,运行时classpath 有效。典型例子如 jdbc(编写是接口规范运行是提供具体实现类需要jar 包)。

 3.5. 依赖传递和可选依赖

3.5.1. 依赖传递

应用场景:

第一直接依赖: HelloFriend 项目依赖 Hello 项目

第二直接依赖: MakeFriend 项目依赖 HelloFriend 项目

3.5.2. 依赖范围对传递依赖的影响 

传递依赖是会受到依赖范围的影响的,具体来看结果如下:

3.5.3. 依赖阻断 

我们使用

<optional>true</optional>

例如我们在 HelloFriend 项目里面的 Hello 依赖处添加该配置

则 makeFriend 项目里面就不会再引入 Hello 的依赖 

 

 3.5.4. 可选依赖

如果我们需要在依赖中明确的排除掉某一依赖,则可以使用 exclusion 属性,排除掉引用的依赖,如图:

4、仓库 

4.1 仓库的概念

在 Maven 的术语中,仓库是一个位置(place)。

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是 JAR),它就是放置所有JAR 文件(WAR,ZIP,POM 等等)的地方。 仓库的类型有:

 本地(local)  中央(central)  远程(remote)

4.2  依赖搜索顺序

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

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

相关文章

使用c#进行串口通信

一、串口通信协议 1.串口通信协议简介 串口通信&#xff08;serial communication&#xff09;是一种设备间非常常用的串行通信方式&#xff0c;大部分电子设备都支持&#xff0c;电子工程师再调试设备时也经常使用该通信方式输出调试信息。讲到某一种通信协议&#xff0c;离…

Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数

知识点&#xff1a; 1、安全开发-原生PHP-PHP.INI安全 2、安全开发-原生PHP-全局文件&单函数 3、安全开发-原生PHP-流量检测&AI算法 一、演示案例-WEB开发-修复方案-PHP.INI配置 文章参考&#xff1a; https://www.yisu.com/ask/28100386.html https://blog.csdn.net/…

蓝桥模拟+真题讲解

今天谁一篇文章哈 &#xff01; 由于本篇文章有些的题目只有图片&#xff0c;因此还望各位见谅。 目录 第一题 题目解析 代码原理 代码编写 填空技巧---巧用python 第二题 题目解析 ​编辑 填空技巧---巧用python 第三题 题目链接 题目解析 必备知识 解题技巧 …

C语言【数据结构】:时间复杂度和空间复杂度.详解

引言 详细介绍什么是时间复杂度和空间复杂度。 前言&#xff1a;为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时…

基于Python的selenium入门超详细教程(第2章)--单元测试框架unittest

学习路线 自动化测试介绍及学习路线-CSDN博客 ​自动化测试之Web自动化&#xff08;基于pythonselenium&#xff09;-CSDN博客 基于Python的selenium入门超详细教程(第1章)--WebDriver API篇-CSDN博客 目录 前言&#xff1a; 一、单元测试 1. 单元测试的定义 2. 单元测…

日志、类加载器、XML(配置文件)

目录 一、日志1.日志技术的概述2.日志技术的体系a. Logback 3.日志的级别 二、类加载器1.概述2.类加载时机3.类加载过程3.类加载器的分类4.常用方法 三、XML&#xff08;配置文件&#xff09;1.概述2.XML的基本语法3.XML的文档约束a.DTD约束b.schema约束 4.XML文档解析a.Dom4jb…

AI大白话(一):5分钟了解AI到底是什么?

&#x1f31f;引言&#xff1a; 在这个信息爆炸的时代&#xff0c;“人工智能”、“AI”、“机器学习”、"深度学习"等词汇频繁出现在我们的生活中。 从手机里的语音助手&#xff0c;到网购平台的个性化推荐&#xff0c;再到最近大火的AI绘画和ChatGPT&#xff0c;人…

蓝桥与力扣刷题(蓝桥 字符统计)

题目&#xff1a;给定一个只包含大写字母的字符出 S, 请你输出其中出现次数最多的字符。如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。 输入格式 一个只包含大写字母的字等串 S. 输出格式 若干个大写字母&#xff0c;代表答案。 样例输入 BABBACAC样…

AtCoder Beginner Contest 397(ABCDE)

目录 A - Thermometer 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; B - Ticket Gate Log 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; C - Variety Split Easy 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; D - Cubes 翻译&#xff1a…

Profinet转Profinet以创新网关模块为核心搭建西门子和欧姆龙PLC稳定通讯架构案例​

你是否有听过PROFINET主站与PROFINET主站之间需要做数据通讯有需求&#xff1f; 例如西门子1500与霍尼韦尔DCS系统两个主站之间的通讯。应用于PROFINET为主站设备还有欧姆龙、基恩士、罗克韦尔、施耐德、GE、ABB等品牌的PLC或DCS、FCS等平台。在生产或智能领域有通讯需求。两头…

计算机视觉|Swin Transformer:视觉 Transformer 的新方向

一、引言 在计算机视觉领域的发展历程中&#xff0c;卷积神经网络&#xff08;CNN&#xff09; 长期占据主导地位。从早期的 LeNet 到后来的 AlexNet、VGGNet、ResNet 等&#xff0c;CNN 在图像分类、目标检测、语义分割等任务中取得了显著成果。然而&#xff0c;CNN 在捕捉全…

C++单例模式精解

单例模式&#xff08;重点*&#xff09; 单例模式是23种常用设计模式中最简单的设计模式之一&#xff0c;它提供了一种创建对象的方式&#xff0c;确保只有单个对象被创建。这个设计模式主要目的是想在整个系统中只能出现类的一个实例&#xff0c;即一个类只有一个对象。 将单…

【java】集合练习2

Student.java&#xff1a;保存学生类的定义。 public class Student {private String name;private int age;public Student(String name, int age) {this.name name;this.age age;}public String getName() { return name; }public int getAge() { return age; }Overridepu…

FineBI_实现求当日/月/年回款金额分析

需求&#xff1a;原始数据结构如下&#xff0c;需要在分组表中&#xff0c;实现各城市当日/月/年的合同金额分析 实现步骤&#xff1a; ①维度拖入城市 ②分别取当日/月/年合同金额 当日DEF(SUM_AGG(${ 地区数据分析1 _ 合同金额 }),[${ 地区数据分析1 _ 城市 }],[LEFT(${ 地…

【计算机网络】2物理层

物理层任务:实现相邻节点之间比特(或)的传输 1.通信基础 1.1.基本概念 1.1.1.信源,信宿,信道,数据,信号 数据通信系统主要划分为信源、信道、信宿三部分。 信源:产生和发送数据的源头。 信宿:接收数据的终点。 信道:信号的传输介质。 数据和信号都有模拟或数字…

解决PC串流至IPad Pro时由于分辨率不一致导致的黑边问题和鼠标滚轮反转问题

问题背景 今天在做 电脑串流ipad pro 的时候发现了2个问题&#xff1a; 1.ipadpro 接上鼠标后&#xff0c;滚轮上下反转&#xff0c;这个是苹果自己的模拟造成的问题&#xff0c;在设置里选择“触控板与鼠标”。 关闭“自然滚动”,就可以让鼠标滚轮正向滚动。 2. ipadpro 分…

LLMs之CoD:《Chain of Draft: Thinking Faster by Writing Less》翻译与解读

LLMs之CoD&#xff1a;《Chain of Draft: Thinking Faster by Writing Less》翻译与解读 导读&#xff1a;这篇论文的核心是提出了一种名为“Chain of Draft”&#xff08;CoD&#xff0c;草稿链&#xff09;的新型提示策略&#xff0c;用于改进大型语言模型&#xff08;LLMs&a…

0CTF 2016 piapiapia 1

#源码泄露 #代码审计 #反序列化字符逃逸 #strlen长度过滤数组绕过 www.zip 得到源码 看到这里有flag &#xff0c;猜测服务端docker的主机里&#xff0c;$flag变量应该存的就是我们要的flag。 于是&#xff0c;我们的目的就是读取config.php 利用思路 这里存在 任意文件读取…

python_巨潮年报pdf下载

目录 前置&#xff1a; 步骤&#xff1a; step one: pip安装必要包&#xff0c;获取年报url列表 step two: 将查看url列表转换为pdf url step three: 多进程下载pdf 前置&#xff1a; 1 了解一些股票的基本面需要看历年年报&#xff0c;在巨潮一个个下载比较费时间&…

为什么需要使用十堰高防服务器?

十堰高防服务器的核心价值与应用必要性 一、‌应对复杂攻击的防御能力‌ ‌T级DDoS攻击防护‌ 十堰高防服务器搭载 ‌T级清洗中心‌&#xff0c;支持智能流量调度与分层处理&#xff0c;可抵御 ‌800Gbps-1.2Tbps‌ 的大规模混合攻击&#xff08;如SYN Flood、UDP反射&#xff…