Maven进阶——坐标、依赖、仓库

server/2024/10/24 8:59:57/

目录

1.pomxml文件

2. 坐标

2.1 坐标的概念

2.2 坐标的意义

2.3 坐标的含义

2.4 自己项目的坐标

2.5 第三方项目坐标 

3. 依赖

3.1 依赖的意义

3.2 依赖的使用

3.3 第三方依赖的查找方法

3.4 依赖范围

3.5 依赖传递和可选依赖

3.5.1 依赖传递

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

3.5.3 依赖阻断

 ​​​​​​​3.5.4 可选依赖

4. 仓库

​​​​​​​4.1 仓库的概念

4.2 本地仓库

​​​​​​​4.3 中央仓库

 ​​​​​​4.4 依赖搜索顺序


1.pomxml文件

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

2. 坐标

2.1 坐标的概念

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

2.2 坐标的意义

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

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:用来帮助定义构件输出的一些附属构件。

2.4 自己项目的坐标

2.5 第三方项目坐标 

3. 依赖

3.1 依赖的意义

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

        每个外部JAR可能还依赖于其他外部JAR文件等。以递归方式下载所有这些外部依赖JAR文件并确保下载正确的版本是一项巨大的任务。当项目越来越大,我们将需要越来越多的外部依赖。

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

3.2 依赖的使用

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

属性说明:

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

3.3 第三方依赖的查找方法

        我们在不确定所需引用的第三方依赖包的坐标时,通过maven的中央仓库进行查找,网址: https://mvnrepository.com/;

        以mybatis举例:

 引入成功。

3.4 依赖范围

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

  • 主代码:main下面的都是主代码在编译的时候的依赖
  • 测试代码:test下是测试代码编译的时候的依赖
  • 运行时:main代码在运行的时候对包的依赖

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

 

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

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

3.5 依赖传递和可选依赖

3.5.1 依赖传递

应用场景:

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

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

 makeFriend项目只依赖了HelloFriend项目,但同时也把Hello项目依赖了进来。

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

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

3.5.3 依赖阻断

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

 <optional>true</optional>


    我们可以看到makeFriend项目现在只引入了HelloFriend的依赖而没有引入Hello的依赖:

依赖阻断表示,当HelloFriend被其他项目依赖时,不传递Hello的依赖至依赖于HelloFriend的项目。 

 ​​​​​​​3.5.4 可选依赖

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

      可以看到,排除Hello后,依赖中就不会引入Hello。

4. 仓库

​​​​​​​4.1 仓库的概念

        在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

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

仓库的类型有:

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

4.2 本地仓库

        Maven 的本地仓库在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

        默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %Maven_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

​​​​​​​4.3 中央仓库

        Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。

中央仓库的关键概念:

  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

 ​​​​​​4.4 依赖搜索顺序


http://www.ppmy.cn/server/134396.html

相关文章

Arduino-ESP32机器人控制器设计练习题汇总

机器人 对抗案例 迷宫案例 练习题 数码管计时器 74HC595等 单选题 ESP32与74HC595之间主要通过哪种通信方式连接&#xff1f; A. I2CB. SPIC. UARTD. 串行移位寄存器&#xff08;答案&#xff09;在Arduino环境中&#xff0c;控制74HC595移位寄存器的库是&#xff1f; A. Wi…

Java:抽象类和接口

一.抽象类 1.抽象类概念和语法 ⨀概念&#xff1a; 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 ⨀语…

MFC学习系列之简单创建与学习

MFC学习系列之简单创建与学习 前言创建关于创建的问题关于控件使用总结 前言 了解一下 创建 基于VS2013进行MFC的项目搭建。 基于vs2013版本太过老旧&#xff0c;从vs2019版本中更新安装MFC控件。 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB8041 此项目需要 MF…

太速科技-456-FMCJ456-14bit 2通道3/2.6/2GS/s ADC +16bit 2通道12.6GS/s DAC FMC AD/DA子卡

FMCJ456-14bit 2通道3/2.6/2GS/s ADC 16bit 2通道12.6GS/s DAC FMC AD/DA子卡 一、产品简介 FMC456是一款高分辨率、高采样率的ADCDAC FMC子板。它同时支持2路14位3.0/2.6/2.0GS/s的A/D通道输入和2路16位12.6GS/s的D/A通道输出&#xff0c;全功率模拟-3dB输入带宽可达9…

Python 实现的风控系统(使用了kafka、Faust、模拟drools、redis、分布式数据库)

以下是一个使用 Python 实现的风控系统示例&#xff0c;涵盖以下技术组件&#xff1a; Kafka 消息中间件&#xff1a;用于实时接收支付业务系统传递的交易数据。Faust&#xff08;Kafka Streams 的 Python 等价&#xff09;&#xff1a;用于流式处理 Kafka 中的消息。规则引擎…

SEO基础:什么是LSI关键词?【百度SEO优化专家】

SEO基础&#xff1a;什么是LSI关键词&#xff1f; 大家好&#xff0c;我是林汉文&#xff08;百度SEO优化专家&#xff09;&#xff0c;在SEO&#xff08;搜索引擎优化&#xff09;中&#xff0c;LSI关键词是一个重要的概念&#xff0c;有助于提升网页的相关性和内容质量。那么…

深度学习-1:逻辑回归和梯度下降

逻辑回归 逻辑回归是一个二分分类问题 比如判断一张图片中是否是猫就是一个二类分类问题 图像由像素值组成&#xff0c;要将图像输入模型&#xff0c;就将其变为一个向量&#xff0c;该向量存储三个通道上的所有像素值&#xff0c;若图像尺寸为64x64x3&#xff0c;则向量维度…

elasticsearch中的向量检索,语义检索,RRF,kNN,ANN,HNSW

kNN 算法 &#xff08;k-Nearest Neighbor&#xff09; KNN可以说是最简单的分类算法之一&#xff0c;同时&#xff0c;它也是最常用的分类算法之一。 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个…