前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Maven】依赖管理,Maven仓库,Maven核心功能

【Maven】依赖管理,Maven仓库,Maven核心功能

作者头像
椰椰椰耶
发布2024-10-15 15:53:03
发布2024-10-15 15:53:03
1660
举报
文章被收录于专栏:学习

Maven 是一个项目管理工具,基于 POMProject Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件

大白话:Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar

  • 项目开发:编译、打包(jar 包)、运行。
image.png|408
image.png|408

什么是 Maven

Maven 是一个项目管理工具,基于 POMProject Object Model,项目对象模型)的概念,Maven 可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件

大白话:Maven 是一个项目管理工具,通过 pom. xml 文件的配置获取 jar 包,而不用手动去添加 jar 包

  • Maven 简单,高效,可以提高我们的开发效率,减少我们的开发 bug。
  • Maven 提供的功能非常多,在这主要体现两方面:
    • 项目构建
    • 管理依赖

创建一个 Maven 项目

IDEA 本身已经继承了 Maven,我们可以直接使用,无需安装

以下截图的 IDEA 版本为:2024.1.2,不同版本的 IDEA 界面展示会有不同

image.png|408
image.png|408
  • 点击 create,就创建好了一个 Maven 项目
image.png|267
image.png|267

Maven 核心功能

接下来我们结合项目,介绍 Maven 在项目开发中的作用

  1. 项目构建
  2. 管理依赖

项目构建

Maven 提供了标准的,跨平台(LinuxWindowsMacOS 等)的自动化项目构建方式

当我们开发了一个项目之后,代码需要经过编译、测试、打包、发布等流程。每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得麻烦。而 Maven 给我们提供了一套简单的命令阿里完成项目的构建

image.png|379
image.png|379
  • 比如点击“package”,就可以完成项目的打包操作
image.png
image.png

打包就是把所有的 class 文件,全部放在一起,打成 jar 包或者 war

  • jarwar 包是一种压缩文件
  • jar 包就是把开发人员已经写好的一些代码进行打包。打包好的 jar 包就可以进入到其他项目中,也可以直接使用这些 jar 包中的类和属性
  • 另外,也可以打成可执行 jar 包,这样的包就可以通过 java -jar 命令来执行
  • war 包可以理解为是一个 web 项目,里面是项目的所有东西,通常用于网站

依赖管理

上面说到,Maven 是一个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加 jar 包获取的 jar 包,其实就是依赖

pom.xml 就是 Maven 的配置文件,用以描述项目的各种信息

依赖配置

依赖:指当前项目运行时所需要的 jar 包 比如 JDBC,我们需要手动下载 mysql-connector-java 的包,并且添加到项目中


如果使用 Maven,我们只需要在 pomxml 中引入 mysql-connector-java 的依赖就可以了

代码语言:javascript
复制
<dependencies>  
    <!--里面放置项目的依赖坐标,可以为多个-->  
</dependencies>
  1. pom 文件 <dependencies> 标签内,添加依赖坐标
代码语言:javascript
复制
<dependencies>  
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.30</version>  
</dependencies>
  1. 点击刷新按钮,引入新加的依赖 jar 包
    • 后续有添加新的 jar 包,或者修改 jar 包的版本,都需要通过该方式在项目中添加依赖
    image.png|246
    image.png|246
  2. 刷新完之后,就可以在项目中看到新加入的 jar 包
依赖传递

早期我们没有使用 Maven 时,向项目中添加依赖的 jar 包,需要把所有的 jar 包都复制到项目工程下。

比如,A 依赖 B,B 依赖 C,那么 A 项目引入 B 的同时,也需要引入 C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的

  • 比如我们要吃火锅,需要有锅、调料、食材,以及确定什么样的锅,什么样的食材
  • 比如去医院看病,需要带上以往的病例,检查结果、处方等,并且要确定带的资料是正确的。如果日期错了,或者患者错了,带少了,就需要回去重新拿

但如果是使用 Maven 的话,就可以避免管理所需依赖的关系。我们只需要在 pom 文件中,定义直接依赖就可以了。由于 Maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也一起导入

  • 比如吃火锅,现在我们点一个海底捞外卖,直接就把所有食材都送过来了,包括什么锅、什么食材
  • 比如去医院看病,借助“互联网”,实现了信息互享,只需要带上身份证,以往的病历和检查结果就都可以看到了

Maven 会把在引入一个依赖的时候,会一起把实现这个功能所需要的依赖也一起自动引入

这里引入 mysql,进行打包,protobuf 就是连带的依赖,需要一起引入

代码语言:javascript
复制
<dependencies>  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
        <version>8.0.29</version>  
    </dependency>  
</dependencies>
image.png|458
image.png|458
依赖排除
image.png|422
image.png|422

项目 A ,依赖一个项目 B 和一个 jarA

  • jarA 依赖 jarBjarC
  • 项目 B 里面是各种依赖,其中也用到了 jarC

但是两边都需要引入 jar 包 C,此时我们在哪边进行引入?

一般 jar 包都是向下兼容,高版本可以兼容低版本

最短路径法: 看项目 A 到两个 jarC 放入路径,哪个更短就用哪个

  • 左边的是三步
  • 右边的是两步 所以就在右边引入 jar

而右边的 jarC 版本比左边的低,无法兼容左边的高版本 jarC。此时就需要将右边的 jarC1.0 升级成 2.0,此时就可以进行指定依赖

  • 首先将 1.0jarC 给排除掉
  • 此时项目中就只剩下 2.0jarC 了,我们在根据路径找 jarC 的时候,就只能找到 2.0jarC

虽然在上面的图片中看起来是有结构的,谁依赖谁。但是放在项目中,都是平铺直叙的,都是放在一起用的

依赖排除

enclusions 就是排除一些依赖,不会默认把相关的所有依赖都进行引入

上面引入依赖的时候,主依赖和相关依赖都是从网上下载的。需要排除一些依赖,就将网上的地址给出来

Maven Help

当项⽬⽐较复杂时,我们就会有 Jar 包冲突的问题,这时候就需要去解决依赖冲突。解决冲突之前,需要先找到冲突,我们可以使⽤ Maven Help 插件来观察包和包之间的依赖关系

image.png
image.png
  • 如果需要排除某个依赖,就右键点击,选择 Exclude

依赖的坐标

这个代码,我们称之为“坐标”,也就是唯一的

Maven 中,根据 groupIdartfactIdversion 的配置,来唯一识别一个 jar 包,缺一不可。当我们在 pom 文件中配置完依赖之后,点击刷新, Maven 就会根据坐标的位置,去仓库里寻找 jar 包,并把它下载下来,添加到项目中,这个 jar 包下载的地方就叫仓库

仓库:用来存储资源,管理各种 jar

代码语言:javascript
复制
<dependency>  
    <groupId>mysql</groupId>  
    <artifactId>mysql-connector-java</artifactId>  
    <version>8.0.30</version>  
</dependency>

Maven 仓库

Maven 仓库分为两种:

  1. 本地仓库 仓库在你本机电脑上,是本地仓库。其他都是远程仓库
  2. 远程仓库

远程仓库

中央仓库

全球唯一,地址为: https://repo1.maven.org/maven2/springframework/

里面东西太多了,不好找。可以在这里面进行快速查找: https://mvnrepository.com

  • 私有服务器
  • 其他公共的

Maven 版本选择哪个?

  1. 没漏洞的
  2. 选择次新版本
  3. 选择人多的 不严格,推荐是基于大家不知道用哪个的情况,对这个 jar 包不熟的情况

jar 包下载路径

  1. 先去本地仓库查找,如果没有,就去中央仓库查
  2. 如果中央仓库没有,就下载失败,报错
  3. 如果中央仓库有,jar 包就从中央仓库下载到本地仓库
  4. 项目从本地仓库中获取
image.png
image.png
image.png
image.png

本地仓库原来是空的,随着使用,里面的包越来越多(从中央仓库下载过来的)

私有服务器

中央仓库里面的包是全世界的都可以看到,而有一些不想公开的 jar 包就放在私服中(私有服务器)

  • 有账号和密码,公司里面可以用
image.png
image.png
  • 有权限的人,一起使用的
  • 如果遇到私服中不存在的 jar 包,第一个人下载之后,后面的人就从私服中可以获取到了,无需再下载了
其他公共服务器
  • 阿里云
  • 华为云

因为中央仓库在国外,所以下载起来会⽐较慢,所以咱们选择借助国内⼀些公开的远程仓库来下载资源

阿里云就相当于是把中央仓库弄了一个镜像,放在了国内,并公开给人用


如果路径中有中文,修改一下 Maven 本地仓库路径

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Maven
  • 创建一个 Maven 项目
  • Maven 核心功能
    • 项目构建
      • 依赖管理
        • 依赖配置
        • 依赖传递
        • 依赖排除
        • 依赖排除
      • Maven Help
        • 依赖的坐标
        • Maven 仓库
          • 远程仓库
            • 中央仓库
            • 私有服务器
            • 其他公共服务器
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档