Maven 基本使用及依赖管理。

绝地灬酷狼 2023-10-02 20:54 18阅读 0赞

目录

一、Maven 基本介绍

1、主要功能

2、标准化的项目结构

3、基本介绍

4、仓库

二、Maven 安装配置

1、下载安装

2、配置环境变量

3、Maven 基本使用

三、IDEA中使用Maven

1、IDEA中配置Maven

2、Maven坐标

3、创建及导入项目

4、配置 Maven-Helper 插件

四、依赖管理

1、依赖配置

2、使用坐标导包

3、依赖范围

五、生命周期

1、Maven 生命周期

2、插件


一、Maven 基本介绍

1、主要功能

Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构
  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)
  • 提供了一套依赖管理机制

2、标准化的项目结构:

项目结构我们都知道,每一个开发工具(IDE )都有自己不同的项目结构,它们互相之间不通用。我再 eclipse 中创建的目录,无法在idea 中进行使用,这就造成了很大的不方便,

而 Maven 提供了一套标准化的项目结构,所有的 IDE 使用 Maven 构建的项目完全一样,所以 IDE 创建的 Maven 项目可以通用。

Maven构建的项目结构: b83023e43dd342f8b7c7fdfec222a700.png

标准化构建流程:

我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成项目构建。

c0a559fb9a50408e814d6e172045a509.png

依赖管理:

依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件)。如之前我们项目中需要使用JDBC和Druid的话,就需要去网上下载对应的依赖包(当前之前是老师已经下载好提供给大家了),复制到项目中,还要将jar包加入工作环境这一系列的操作。

d709382d9aea4391a31a29ca5e91766f.png

而Maven使用标准的 坐标 配置来管理各种依赖,只需要简单的配置就可以完成依赖管理。如下图右边所示就是mysql驱动包的坐标,在项目中只需要写这段配置,其他都不需要我们担心,Maven都帮我们进行操作了。 5de5c2eb36e845d7a779afc2a788efd8.png

3、基本介绍

▶ 简介

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

▶ Maven 模型

5421a373bc0f47d9b17fb2ba33800db5.png

紫色框框起来的部分,他就是用来完成 `标准化构建流程` 。如我们需要编译,Maven提供了一个编译插件供我们使用,我们需要打包,Maven就提供了一个打包插件提供我们使用等。

e77e85a2139f4774aa18bbac8635a82b.png

紫色框起来的部分,项目对象模型就是将我们自己抽象成一个对象模型,有自己专属的坐标 。

▶ Maven项目

740377fe9e7a41619bbbbf639de2d538.png

依赖管理模型则是使用坐标来描述当前项目依赖哪儿些第三方jar包,如下图所示:

dd59e1ba2c4143948f65eac54993c8ac.png

4、仓库

▶ 仓库的分类

用于储存各种资源,包含各种jar包

ff0f7bb12535466eb385a85410dfa22d.png

▷ 本地仓库:自己计算机上的存储资源的一个仓库,连接远程仓库获取资源。

▷ 中央仓库:由Maven团队维护的全球唯一的仓库

● 地址: https://repo1.maven.org/maven2/

▷ 远程仓库(私服):一般由公司团队搭建的私有仓库,从中央仓库获取资源

● 私服的作用:

保存具有版权的资源,包含购买或自主研发的 jar,中央仓库中的jar都是开源的,不能存储具有版权的资源。私服只在一定范围内共享资源,仅对内部开放,不对外共享。

▶ 配置仓库

▷ 本地仓库

● maven启动后,默认资源下载到本地仓库,默认位置:

  1. <localRepository>${user.home}/.m2/repository</localRepository>

● 自定义位置:

  1. <localRepository>D:\maven\repository</localRepository>

▷ 远程仓库

● 默认连接远程仓库的位置

  1. <repositories>
  2. <repository>
  3. <id>central</id>
  4. <name>Central Repository</name>
  5. <url>https://repo.maven.apache.org/maven2</url>
  6. <layout>default</layout>
  7. <snapshots>
  8. <enabled>false</enabled>
  9. </snapshots>
  10. </repository>
  11. </repositories>

▷ 镜像仓库

● 配置阿里云镜像仓库

  1. <mirrors>
  2. <!-- 配置具体的仓库的下载镜像-->
  3. <mirror>
  4. <!-- 此镜像的唯一标识符,用来区分不同的mirror元素-->
  5. <id>nexus-aliyun</id>
  6. <!-- 对哪种仓库进行镜像,简单来说就是替代哪个仓库-->
  7. <mirrorOf>central</mirrorOf>
  8. <!-- 镜像名称-->
  9. <name>Nexus aliyun</name>
  10. <!-- 镜像URL -->
  11. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  12. </mirror>
  13. </mirrors>

▶ 全局setting 与 用户setting 的区别

● 全局setting 定义了当前计算器中Maven 的公共配置

● 用户setting 定义了当前用户的配置

▶ 访问顺序

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

* 如果有,则在项目直接引用;

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

5d5db261442e45e7b050c7c978da25e5.png

如果还可以搭建远程仓库,将来jar包的查找顺序则变为:

* 本地仓库 —> 远程仓库—> 中央仓库 30ed67b9b7174abc87f041c0e20bfa2d.png


二、Maven 安装配置

1、下载安装

下载压缩包,然后解压 (如:apache-maven-3.6.1.rar) 既安装完成,建议解压缩到没有中文、特殊字符的路径下。

解压缩后的目录结构如下:

0340dc4032a542ddb7a1c75ba09af636.png

▷ bin目录 : 存放的是可执行命令。mvn 命令重点关注。
▷ conf目录 :存放Maven的配置文件。`settings.xml` 配置文件后期需要修改。
▷ lib目录 :存放Maven依赖的jar包。Maven也是使用java开发的,所以它也依赖其他的jar包。

2、配置环境变量

▷ `此电脑` 右键 —> 属性 —> `高级系统设置` —> `高级` —> `环境变量`

674a7a4143714ca69b568623e2654e55.png

240b7b7b1f044607a91e3822bdea3a4f.png

▷ 在 `Path` 中进行配置:

63673415315e4485b0d7645dab7cd679.png

▷ 打开命令提示符进行验证,出现如图所示表示安装成功

c003e0c2f2044218948a8f92fbb7ec3f.png

▷ 配置本地仓库

修改 conf/settings.xml 中的 为一个指定目录作为本地仓库,用来存储jar包。 b50aa9f3ec944aa0a7df34639cb3f529.png

▷ 配置阿里云私服

中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。修改 conf/settings.xml 中的 标签,为其添加如下子标签:

  1. <mirror>
  2. <id>alimaven</id>
  3. <name>aliyun maven</name>
  4. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>

3、Maven 基本使用

▶ 常用命令

  • compile :编译
  • clean:清理
  • test:测试
  • package:打包
  • install:安装

▶ 项目结构

Maven构建的项目,项目结构如下:

03b1cbe605344170b44ded11b0dac660.png

而我们要使用上面命令需要在磁盘上进入到这个项目的 `pom.xml` 目录下,打开命令提示符(按住shift 再点击鼠标右键才能打开下列的命令提示符 Windows PowerShell)

4f81d77d63b34fdaacb301c40f8f6079.png

▶ compile :编译

命令行执行 mvn compile 可以看到:

▷ 从阿里云下载编译需要的插件的jar包,在本地仓库也能看到下载好的插件
▷ 在项目下会生成一个 `target` 目录

c1f480fdbc9645d1bf7c41ae8deb49b5.png

同时在项目下会出现一个 `target` 目录,编译后的字节码文件就放在该目录下:

03bbca5a4586415fa19e5720a023339b.png

▶ clean:清理

执行 mvn clean 命令可以看到

▷ 从阿里云下载清理需要的插件jar包
▷ 删除项目下的 `target` 目录

0dba7bc86e5d4111b9187db3a75a3995.png

▶ test:测试

mvn test 该命令会执行所有的测试代码。执行上述命令效果如下

f84556b18d7f42ffa3322b13e4020601.png

▶ package:打包

执行 mvn package 命令可以看到:

▷ 从阿里云下载打包需要的插件jar包
▷ 在项目的 `terget` 目录下有一个jar包(将当前项目打成的jar包)

d003e3c177484fae9f7771494704b1e6.png

▶ install:安装

mvn install 该命令会将当前项目打成jar包,并安装到本地仓库。执行完上述命令后到本地仓库查看结果如下:

8c8cbb4f8d0e48539e90bef178df37b7.png

▶ maven项目 和 web项目 结构区分

8ee29168bb2947cea0cc3f0e5c457446.png


三、IDEA中使用Maven

1、IDEA中配置Maven

ec9a5464be5742e4b243f4bfc8b43a03.png

aeb0813404464c149bdaa511d3c64709.png

设置 IDEA 使用本地安装的 Maven,并修改配置文件路径 7631bce511134717a92eead7c40027b8.png

2、Maven坐标

▶ 坐标?

Maven 中的坐标是资源的唯一标识,使用坐标来定义项目或引入项目中需要的依赖

▶ Maven 坐标主要组成

groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
version:定义当前项目版本号

packaging : 定义该项目的打包方式

b4f40831dd1b47ef994d8334e3c61c78.png

▶ 注意

上面所说的资源可以是插件、依赖、当前项目。我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

▶ 插件

Tomcat7 运行插件

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.tomcat.maven</groupId>
  5. <artifactId>tomcat7-maven-plugin</artifactId>
  6. <version>2.1</version>
  7. <configuration>
  8. <port>80</port>
  9. <path>/</path>
  10. </configuration>
  11. </plugin>
  12. </plugins>
  13. </build>

3、创建及导入项目

▶ 创建项目

cb6ce4483b214085a5f176b3fbed9afa.png

ac742c3c71864c0dbda51fd16b565efc.png

填写模块名称,坐标信息,点击finish,创建完成

76817c74872b4da586a3f9db15469832.png

创建好的项目目录结构如下:

16822fa606a8426db3959b8335ea07e3.png

▶ 导入项目

选择右侧Maven面板,点击 + 号

8ccb8455882b48698fb348ef0e82293c.png

选中对应项目的pom.xml文件,双击即可

c0238db3422e44fabd6a2199731870bf.png

如果没有Maven面板,选择

View —> Appearance —> Tool Window Bars

e14348f946154925b7435f264078792a.png

可以通过下图所示进行命令的操作:

6a7922121f4a46b1964aaad25ee13f2a.png

4、配置 Maven-Helper 插件

▷ 选择 IDEA中 File —> Settings

a237486a4d1f42a1bc32ab688372c46e.png

▷ 选择 Plugins

c33de1626dcc426d97783ebb10d597ca.png

▷ 搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept

7194672aa0e146b1bb8783b5bb6375f9.png

▷ 重启 IDEA

安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:

f9b526c1fd974a83af36b57e30450a8c.png


四、依赖管理

1、依赖配置

▶ 依赖配置

● 依赖指当前项目运行所需要的 jar 包, 一个项目可以设置多个依赖

● 格式:

  1. <!-- 设置当前项目所依赖的所有 jar-->
  2. <dependencies>
  3. <!-- 设置具体依赖-->
  4. <dependency>
  5. <!-- 设置依赖所属群组id-->
  6. <groupId>junit</groupId>
  7. <!-- 依赖所属项目id-->
  8. <artifactId>junit</artifactId>
  9. <!-- 依赖版本号-->
  10. <version>4.12</version>
  11. </dependency>
  12. </dependencies>

▶ 依赖传递

● 依赖具有传递性:

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

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

cd1c0a248c2d4c5f8ef93aedfd1a9970.png

▶ 依赖传递冲突

● 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高

● 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

● 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

ed4f5f665c9b4f0e94315fd7a3aa53b6.png

▶ 可选依赖

可选依赖指对外隐藏当前所依赖的资源—不透明

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.12</version>
  5. <optional>true</optional>
  6. </dependency>

▶ 排除依赖

排除依赖指主动排除依赖资源,被排除 的资源无需指定版本—不需要

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.12</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.hamcrest</groupId>
  8. <artifactId>hamcrest-core</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>

2、使用坐标导包

在项目的 pom.xml 中编写 标签,在 标签中 使用 引入坐标,定义坐标的 groupId,artifactId,version

2686b87f022f4d15af2ac49578bdade8.png

点击刷新按钮,使坐标生效

7465be2f7032408d97abf60fc8e3efec.png

注意:
▷ 具体的坐标我们可以到网站进行搜索:https://mvnrepository.com/

▶ 快捷方式导入jar包的坐标

在 pom.xml 中 按 alt + insert,选择 Dependency

cf8e4c83fb6541ea8e784eaebf4917fe.png

在弹出的面板中搜索对应坐标,然后双击选中对应坐标,点击刷新按钮,使坐标生效

64c9e674aaf84414928557ae6fc89a64.png

▶ 自动导入设置

选择 IDEA中 File —> Settings

6299295c81ad47aabf13ec5ba1aa560d.png

在弹出的面板中找到 Build Tools

bb03c533f5cd4fbcb8eaf4f0d795a2c0.png

选择 Any changes,点击 ok 即可生效

3、依赖范围

通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。如下图所示给 `junit` 依赖通过 `scope` 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

06feff12f979439b8201769ce42d2e11.png

那么 `scope` 都可以有哪些取值呢?

作用范围:

● 主程序范围有效 (main 文件夹范围内)

● 测试程序范围有效 (test 文件夹范围内)

● 是否参与打包 (package 指令范围内)

cfd932a61da048ea94d2ce1ce9737b45.png

▷ compile :作用于编译环境、测试环境、运行环境。
▷ test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值。
▷ provided :作用于编译环境、测试环境。我们后面会学习 `servlet-api` ,在使用它时,必须将 `scope` 设置为该值,不然运行时就会报错。
▷ runtime : 作用于测试环境、运行环境。jdbc驱动一般将 `scope` 设置为该值,当然不设置也没有任何问题 。

▷ 注意:
如果引入坐标不指定 `scope` 标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。

▶ 依赖范围传递性

带有依赖范围的资源进行传递,作用范围受到影响。

467c0e0cd5464873b83c4cecbaae7d64.png

五、生命周期

1、Maven 生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件。Maven 对项目构建的生命周期划分为3套:

▷ clean :清理工作。
▷ default :核心工作,例如编译,测试,打包,安装等。
▷ site : 产生报告,发布站点等。这套声明周期一般不会使用。

同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如默认(default)生命周期如下:

654705db985d4435bf74985c182c5643.png

当我们执行 `install`(安装)命令时,它会先执行 `compile`命令,再执行 `test ` 命令,再执行 `package` 命令,最后执行 `install` 命令。

当我们执行 `package` (打包)命令时,它会先执行 `compile` 命令,再执行 `test` 命令,最后执行 `package` 命令。

默认的生命周期也有对应的很多命令,其他的一般都不会使用,我们只关注常用的:

5aa58d220c5743518397a4e8d9ea9fa3.png

▶ clean 生命周期

pre-clean :执行一些需要在clean 之前完成的工作

clean :移除所有上一次构建生成的文件

post : 执行一些需要在clean 之后立刻完成的工作

▶ site 构建生命周期

pre-site : 执行一些需要在生成站点文档之前完成的工作

site :生成项目的站点文档

post-site :执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy :将生成的站点文档部署到特定的服务器上

▶ default 构建生命周期

997b715946774e09bf38befa529e2c5b.png

2、插件

▶ 插件

● 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能

● 默认maven在各个生命周期上绑定有预设的功能

● 通过插件可以自定义其他功能

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-source-plugin</artifactId>
  6. <version>2.2.1</version>
  7. <executions>
  8. <execution>
  9. <goals>
  10. <goal>jar</goal>
  11. </goals>
  12. <phase>generate-test-resources</phase>
  13. </execution>
  14. </executions>
  15. </plugin>
  16. </plugins>
  17. </build>

3918c31f49504bd68bb1fc37440255e6.png

发表评论

表情:
评论列表 (有 0 条评论,18人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Maven依赖管理

    定义maven坐标 每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义。 <!--项目名称,定义为组织名+项目名,类似包名-->

    相关 maven依赖机制依赖管理

    maven依赖机制及依赖管理 依赖性传递: 依赖调解: 当项目中出现多个版本构件依赖的情形,依赖调解决定最终应该使用哪个版本。当然,你也可以在项目POM文件中

    相关 Maven 依赖管理

    Maven 依赖管理 Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针...