Maven

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Java 应用服务中间件 Maven
配置阿里的maven镜像
配置阿里的maven镜像
2071 0
|
存储 NoSQL Redis
详解布隆过滤器的原理、使用场景和注意事项
详解布隆过滤器的原理、使用场景和注意事项
442 0
|
10月前
|
存储 人工智能 分布式计算
ALink System亮相CCF中国存储大会 凝聚Scale Up互连共识
在首届CCF中国存储大会上,阿里云服务器研发团队带来最新的UALink联盟进展,以及ALink System产业生态在国内的落地现状。
|
7月前
|
数据采集 人工智能 搜索推荐
DeepSeek告诉你眼中不会被AI替代的职业,打工人可以这样华丽转型
在AI技术飞速发展的今天,职场正经历前所未有的变革。麦肯锡预测,到2030年全球约30%的岗位可能被AI替代,但AI并非终结者,而是转型推手。DeepSeek揭示了教育、医疗、手工艺和创意等难以被AI替代的职业领域,并提供了从“被替代者”到“AI指挥官”的转型指南。生成式人工智能(GAI)认证成为提升自我、适应AI时代的关键工具,助力职场人掌握核心技能,实现华丽转型。未来赢家将是善用AI放大自身优势的人。
|
11月前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
376 1
|
12月前
|
安全 API 数据安全/隐私保护
基于Keycloak的认证与授权
【10月更文挑战第27天】Keycloak 是一个开源的身份和访问管理解决方案,提供用户认证、授权、单点登录等功能,保护应用程序和服务的安全。其认证流程包括用户登录、凭证验证、身份验证令牌生成、令牌返回给应用、应用验证令牌、用户身份确认。Keycloak 支持资源定义、权限定义、角色创建与分配、用户角色分配、访问请求与授权决策等授权流程。其优势在于集中式管理、高安全性、良好扩展性和社区支持。适用于企业应用集成、微服务架构、移动应用及 API 安全等多种场景。
542 3
|
机器学习/深度学习 数据采集 算法
基于机器学习的二手房价格分析与预测设计与实现
本文通过机器学习技术对西安市二手房市场价格进行分析与预测,利用数据预处理、特征提取和模型训练,深入挖掘影响房价的关键因素,旨在为市场参与者提供科学的定价信息和决策支持。
713 1
基于机器学习的二手房价格分析与预测设计与实现
|
存储 Java Linux
Maven 仓库
Maven仓库是管理项目依赖的存储位置,包括本地、中央和远程三种类型。本地仓库在首次执行Maven命令时创建,默认位于用户目录下的.m2/repository/。若本地缺少依赖,Maven会从远程仓库下载至本地。中央仓库由Maven社区维护,包含大量常用Java构件,无需配置,但需网络访问。开发者可通过http://search.maven.org/#browse搜索其内容。
|
Java Apache 项目管理
maven
Maven 是一个流行的 Java 项目管理工具,它可以帮助开发人员管理项目依赖、构建项目、运行测试、打包和部署项目等。Maven 的主要功能包括:
375 1
|
前端开发 API
《OpenGL编程指南(原书第9版)》——2.8 SPIR-V
本节书摘来自华章计算机《OpenGL编程指南(原书第9版)》一书中的第2章,第2.8节,作者:(美)约翰·克赛尼希(John Kessenich)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
5598 0