Maven

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Maven

       学习这一部分要先检查IDEA版本,社区办要求 2021.1~2022.1.4,专业版则无要求。如果个人电脑不是专业版,版本又不在这个范围,需要卸载重新安装。

       IDEA卸载参考:IDEA卸载和删除注册表_idea清理注册表-CSDN博客(一定要删除注册表)


一、什么是Maven

       官网对Maven的描述:

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

       翻译过来就是:

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

       大白话:

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


二、为什么要学Maven


       一句话:简单、方便,能提高我们的开发效率,减少我们的开发BUG

       Maven提供的功能非常多,下面的体现主要是以下两个方面:1、项目构建     2、管理依赖


三、创建一个Maven项目


       IDEA本身已经集成了Maven,不需要我们另外单独安装,可以在IDEA上直接用,不用安装。

       下面是用专业版2023.2演示:打开IDEA -> file -> New Project,如图:

       点击create,就创建好了一个Maven项目,还会自动生成一个pom.xml文件,如图:


四、Maven 核心功能


       接下来,我们结合项目,介绍 Maven 在项目开发中的作用。主要体现在:1、项目构建     2、管理依赖

1、项目构建

       Maven 提供了标准的、跨平台(Linux,Windows,MacOS等)的自动化项目构建方式。

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

       下面写一些简单的Java代码:

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("hello world");
        }
    }
}

       如图:

       

       左键双击package,就可以把我们刚才写的代码,打成 jar 包,如图:

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

jar包 和 war包 都是一种压缩文件。

       jar包 就是把开发人员已经写好的一些代码进行打包。打好的 jar包 就可以引入到其他项目中,也可以直接使用这些 jar包 中的类和属性另外也可以打成可执行的 jar包,这样的包就可以通过 java -jar 命令来执行

       war包 可以理解为是一个web项目,里面是项目的所有东西,通常用于网站。

2、依赖管理

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

(1)依赖配置

       依赖指当前项目运行所需要的 jar包

       比如之前学习 JDBC 时,我们需要手动下载 mysql-connector-java 的包,并且要手动添加到项目中。而使用Maven,只需要在 pom.xml 中引入 mysql-connector-java 的依赖就好了

       格式

    <dependencies>
        <!--⾥⾯放置项⽬的依赖坐标, 可为多个 -->
    </dependencies>

       <dependencies>标签是.xml文件的,格式有点像html的标签;依赖可以理解为就是经纬度,给你经纬度,你就可以在找到相应的目标位置。

       1、在pom.xml文件内写入下面代码

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
    </dependencies>

       2、点击刷新按钮,引入新加入的依赖 jar包。(后续有添加新的 jar包,或者修改 jar包 版本,都需要通过上述方式在项目中添加依赖)

       刷新按钮的点击,有下面两种方式:

       3、刷新完成后,在左边这里的目录下就有对应的jar包了,如图:

(2)依赖传递

       早期没有使用Maven时,向项目中添加依赖的 jar包,需要把所有的 jar包 都复制到项目工程下。比如 A 依赖 B,B 依赖 C,那么A项目引入B的同时,也需要引入C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。

比如我们要吃火锅,需要有锅,有调料,有食材,以及确认什么样的锅,什么样的食材。

比如去医院看病,需要带上以往的病例,检查结果,处方等,并且要确认带的资料是正确的。如果日期错了,或者患者错了,少带了,就需要回去重拿。

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

比如吃火锅,现在可以点一个海底捞外卖,就直接把所有食材都送过来了,包括什么锅,什么配菜,调料等等。

比如去医院看病,现在可以借助“互联网”,实现了信息共享,只需要带上身份证,以往的病例和检查结果就都可以看到了。

       如图:

       项目A通过 Maven 引入 Jar A 时,就会自动引入 Jar B 和 Jar C

       Jar A 和 项目B 就是 项目A 的直接依赖。Jar B,Jar C是间接依赖

直接依赖在当前项目中 通过依赖配置建立的依赖关系

间接依赖被依赖的资源 如果依赖其他资源,当前项目间接依赖其他资源

(3)依赖排除

       排除依赖指主动断开依赖的资源。(被排除的资源无需指定版本)

       当前阶段我们需要依赖的库并不多,但随着项目的越来越来复杂,库之间的依赖关系也会变得越来越复杂。像上面图中,如果项目A不需要 Jar B,也可以通过排除依赖的方式来实现

比如我要寄件,在网上下单了,默认会有一个服务:快递小哥会上门取件,帮我寄出去;但这时我刚好要出门,也顺路经过站点,也可以选择自己送过去。

       代码示例:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>6.0.6</version>
 
    <!--排除依赖-->
    <exclusions>
        <exclusion>
            <artifactId>spring-jcl</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
</dependency>

       Maven还有一些功能,是依赖调解,可选依赖等。

当项目中的依赖存在依赖冲突,例如存在这样的依赖:

       A->B->C->X(1.0)

       A->D->X(2.0)

Maven会采用最短路径优先的原则去选择依赖,这里2的依赖路径更短,所以会选择X(2.0),当然也可以指定某个依赖的般般,指定X(1.0)

3、Maven Help 插件

       安装插件过程File -> Setting -> Plugins -> 搜索 “Maven Help” -> 找到对应插件,点击 Install 安装即可,按照后要重启 IDEA,才能生效。如下图:

       点击 Install 后,下载完后就如下图:

       点击 Restart IDE,重启IDEA。

       安装完后,打开 pom.xml 文件,就可以看到 Jar包 之间的依赖关系,如图:

       也可以右键排除掉一些依赖,如图:

       点击后,就会没了,如图:


五、Maven 仓库


(1)仓库的介绍

       我们通过短短几行代码,就可以把依赖 jar包 放在项目里,具体是如何做的呢?

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>
    </dependencies>

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

      在Maven中,根据 groupId、artifactId、version 来配置,通过这些标签,识别出唯一的一个jar包,这三个标签,缺一不可。

       当我们在 pom 文件中配置完依赖之后,点击刷新,Maven 就会根据坐标的配置,去仓库里寻找 jar包,并把他下载下来,添加到项目中。这个 jar包 下载的地方,就称为仓库。

       仓库用于存储资源,管理各种 jar包。如图:

       

       Maven仓库 的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包、插件等)。

       如图:

       Maven仓库 分为两大类:本地仓库 和 远程仓库。其中远程仓库又分为中央仓库、私服 和 其他公共库。

(2)本地仓库

       本地仓库自己计算机上的一个目录(用来存储 jar包)

       当项目中引入对应依赖 jar包 后,首先会查找本地仓库中是否有对应的 jar包

——如果有,则在项目中直接引用。

——如果没有,则去中央仓库中下载对应的 jar包 到本地仓库。

       如图:

       本地仓库地址可以通过 Maven 配置查看:File -> Settings,如图:

User settings fileMaven的配置文件

Local repositoryMaven的本地仓库地址

       如果这里默认的目录上有中文路径,则要修改一下路径,或者想把本地仓库地址路径换一下,可以进行修改,下面是修改方法:

       找到原来地址仓库的 .m文件,全部复制下来

       把它粘贴到你的目的路径,如图:

       现在修改IDEA的仓库地址目录和Maven的配置文件(在settings上),如图:

       还要修改新的项目的仓库地址和配置文件,位置在如图:

       步骤和上面的一样,如图:

       经过上面这些步骤,就可以修改本地仓库路径了(这里我把国内源也换了一下,下面会有介绍)。我们查看本地仓库目录,可以看到该目录下有许多 .jar 文件。(最开始是空的,随着Maven的使用,该仓库下文件会越来越多)

(3)中央仓库

      中央仓库Maven 软件中内置一个远程仓库地址,也就是中央仓库的地址,服务于整个互联网。由 Maven 团队维护,这是全球唯一的。我们也可以把自己写好的 Jar包 上传到中央仓库(需具备一定的要求),也可以从中央仓库下载 Jar包。

仓库地址:https://repo1.maven.org/maven2/

查询Jar包在仓库的坐标(位置):https://mvnrepository.com/

如何查找 Jar 的坐标?

       1、访问  https://mvnrepository.com/  。

       2、进行查找,比如要找的是 MySQL。

      3、选择要添加的 jar包 版本

      4、查看 jar包 对应的坐标

       框出来的文本就是jar包对应的坐标,复制框出来的文本,粘贴进 IDEA 的 pom.xml 文件中。

(4)私有服务器

       私有服务器,简称为:私服,一般由公司团队搭建的私有仓库。私服属于某个公司,或者某个部门,往往需要一定权限

      当有了私服之后,Maven依赖下载顺序就会发生变化,如图:

       当 pom.xml 写入一个依赖时,是先到本地仓库查找

1、如果本地仓库有,就直接从本地仓库拿。

2、如果本地仓库没有,就到私服中查找,私服中有,就从私服上下载这个依赖到本地仓库中。

3、如果私服没有,就会在中央仓库上查找,中央仓库有,私服就会从中央仓库中下载下来,然后再传给本地仓库。

4、如果中央仓库没有,也会从中央仓库下载,但中央仓库没有这个资源,就会报异常。

       因为私服是很多人在使用的,所以只需要第一个使用者下载一次,就可以了


六、Maven 设置国内源


       和上面设置本地仓库目录操作一样

1、配置当前项目的setting:

      file -> Settings

       原始的Maven路径,不同电脑路径不同,可以在这上面看到的,选择新的路径不能有中文,操作和上面介绍修改本地仓库路径一样。

配置国内源

       Maven仓库默认在国外:https://repo1.maven.org/maven2/  ,国内使用时会比较慢,我们可以更换为阿里云的仓库,也可以是别的仓库,参考:Maven 镜像地址大全 - 知乎 (zhihu.com)

       打开setting.xml,在 mirrors节点上,添加内容如下:

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>阿⾥云公共仓库</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

       如果上述地址不存在settings文件,则可以用这个:setting.xml (泡泡姐的gitee仓库)

2、设置新项目的setting:

      file -> New Projects Setup -> Settings for New Projects

       点击完这里后,操作跟上面的操作一样

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 Java Maven
|
5月前
|
Java Maven 开发工具
Maven 特点
Maven是一个强大的Java项目管理工具,其特点包括:遵循统一规范的项目设置,支持跨工程共享;具备自动更新依赖的功能,并拥有庞大的库资源;可扩展,允许用户编写Java或脚本插件;几乎无需额外配置即可使用新功能;基于模型的构建系统,能自动生成JAR、WAR等格式的输出;能创建一致性项目站点,包含标准报告和自定义文档;支持发布管理和源代码管理集成;具有向后兼容性,方便旧版本迁移;子项目能继承父项目的依赖;并行构建提升编译效率;提供改进的错误报告,链接到详细解释页面。
|
6月前
|
Java Maven
Maven
Maven
87 1
|
Java 数据库连接 Maven
Maven介绍
Maven介绍
92 0
|
6月前
|
存储 Java 关系型数据库
|
Java Maven
|
Java 应用服务中间件 Maven
关于Maven,你真的了解它吗?(上)
关于Maven,你真的了解它吗?(上)
|
Java 应用服务中间件 Apache
零基础快速理解Maven
零基础快速理解Maven
|
存储 安全 IDE
maven你必须要掌握的
《基础系列》
161 0