Maven

Author:Dawn_T17🥥

目录

一.Meven介绍 

Maven的工作过程 

Maven的安装 

Maven坐标 

二.Maven新项目的导入

三.Maven依赖管理

1.依赖配置

2.依赖传递 

 3.依赖范围

 4.生命周期


一.Meven介绍 

Maven 是一个项目管理和构建工具。

它主要用于 Java 项目,可以自动化项目的构建、依赖管理和项目部署等过程。

Maven 定义了一套标准化的项目结构和配置方式,使得开发人员能够更加方便和高效地管理项目。

 1.依赖管理

通过在 pom.xml 文件中配置依赖,Maven 会自动下载所需的库和框架,并确保项目在不同的环境中都能正确构建。

Maven 通过在 pom.xml 文件中声明依赖的坐标(包括groupId、artifactId 和 version)来管理项目的依赖。以下是一些关键的优点和特点:

  • 版本控制:可以精确指定依赖的版本,避免因版本不一致导致的问题。例如,如果项目依赖于 Spring Framework 的某个特定版本,如 5.3.22 ,通过明确声明这个版本,确保整个项目团队都使用相同的版本进行开发和测试。

  • 依赖传递:当一个依赖本身又有其他依赖时,Maven 会自动处理这些传递性依赖。例如,引入一个 Web 开发框架 ,它可能依赖于特定版本的 数据库连接池 ,Maven 会一并将这些相关依赖引入项目。

  • 冲突解决:如果多个依赖之间存在版本冲突,Maven 会尝试按照一定的规则进行解决,通常会选择一个较新且兼容的版本。

  • 依赖范围:可以为依赖指定不同的范围,如 compile(编译时和运行时都需要)、test(仅测试时需要)等,这有助于优化项目的构建和部署。

  • 仓库管理:Maven 从中央仓库或自定义的私有仓库中获取依赖。开发者可以方便地配置仓库地址和访问权限。

  • 更新和升级:可以轻松地更新依赖到新的版本,只需修改 pom.xml 中的版本号,然后重新构建项目

  2.统一项目结构 

因为不同的开发工具有着不同的项目结构,maven统一了项目结构

   Maven 定义的典型项目结构通常包括以下几个主要部分:

  • src/main/java:存放项目的主要 Java 源代码。
  • src/main/resources:用于放置项目运行时所需的资源文件,如配置文件、属性文件等。
  • src/test/java:包含项目的测试代码。
  • src/test/resources:存放测试相关的资源文件。

3.项目构建

Maven 通过一系列预定义的阶段和目标来执行项目的构建。主要包括以下几个关键步骤:

  1. 编译源代码:将 src/main/java 中的 Java 代码编译为字节码。
  2. 运行测试:执行 src/test/java 中的测试代码,确保代码的质量和功能的正确性。
  3. 打包:将编译后的代码和相关资源打包成一个可部署的构件,如 JAR(Java Archive)、                 WAR(Web Application Archive)等。
  4. 安装:将构建好的构件安装到本地 Maven 仓库,以便其他项目可以引用。

在构建过程中,Maven 会根据 pom.xml 中的配置来处理依赖关系、插件配置等。

例如,一个简单的 Web 应用项目,Maven 会先编译 Java 代码和处理静态资源,然后运行针对服务层和控制器的测试用例。如果测试通过,会将项目打包成 WAR 文件,并可以将其部署到应用服务器上。

另外,Maven 还支持自定义构建配置。比如,可以通过配置插件来执行代码检查、生成文档、优化资源等额外的任务。

 官网介绍:Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型的概念 (POM),Maven 可以从一个中心信息来管理项目的构建、报告和文档。

TIP 

“POM” 常见的是指 “Project Object Model”(项目对象模型)。

在 Maven 项目中,pom.xml 是 Maven 的核心配置文件,它定义了项目的基本信息、依赖、插件、构建配置等重要内容。

以下是 pom.xml 中的一些常见配置和其作用:

  • <groupId>:定义项目所属的组织或团体的唯一标识符。
  • <artifactId>:项目的唯一标识符,在所属的 groupId 范围内是唯一的。
  • <version>:项目的版本号。
  • <dependencies>:声明项目所依赖的其他库或框架。
  • <build>:包含构建相关的配置,如插件的使用、编译选项等。

Maven的工作过程 

因为从 中央仓库下载jar包要联网,且Apache服务器在国外,下载速度慢。

项目开发时会使用公司的私服(远程仓库) 

Maven的安装 

通过连接阿里云私服提高下载速度

emmmmm......

修改核心文件settings.xml,添加阿里云下载网址时候,标签没有闭合。。。。。。。。

 导致之后idea,老是爆红——显示xml文件格式不对。。。。

囧(nnd搞了2个小时才发现。。谁能想到是这个错误啊,低幼)

最后也是成功导入了Maven插件

并成功输出了“Hello Maven”

编译后左侧会多出一个target文件夹

target 文件夹是 Maven 构建过程中生成的输出目录。

它包含了各种构建产物,例如:

  1. 编译后的字节码文件(.class 文件)。

  2. 打包生成的 JAR、WAR 等文件。

  3. 测试报告。

  4. 资源处理后的结果。

Maven坐标 

Maven 坐标(Maven Coordinate)是用于唯一标识 Maven 项目的一组信息,它由三个主要部分组成:groupId、artifactId 和 version。

  • groupId:通常是项目的组织或公司的反向域名,用于对项目进行分组和分类。例如,org.apache 、com.example 。

  • artifactId:项目的名称。它在给定的 groupId 内是唯一的。例如,maven 、my-library 。

  • version:项目的版本号。用于区分项目的不同发布版本,例如 1.0.0 、 2.1.5-SNAPSHOT 。

通过这三个部分的组合,可以精确地指定和引用一个特定的 Maven 项目。

例如,org.springframework:spring-webmvc:5.3.23 就是一个 Maven 坐标,它表示 groupId 为 org.springframework ,artifactId 为 spring-webmvc ,版本为 5.3.23 的项目。

开发一个项目的时候,需要引入一个第三方库,只要知道这个库的 Maven 坐标,然后在 pom.xml 文件中进行配置,Maven 就能自动下载和管理这个依赖。

二.Maven新项目的导入

前提

首先要把需要导入的maven项目 放到对应磁盘下

法一 

法二 

三.Maven依赖管理

1.依赖配置

  • groupId:定义了依赖库所属的组织或项目组的唯一标识符。
  • artifactId:依赖库的唯一名称。
  • version:指定依赖库的具体版本。

Maven 会根据这些配置信息从 Maven 中央仓库(或者您配置的其他仓库)下载所需的依赖,并将其添加到项目的类路径中,以便在项目中使用。

 

每次添加完依赖,都要“刷新”一下 

依赖配置完成,右侧Maven面板能看到 

2.依赖传递 

依赖传递是 Maven 中一个重要的特性。

当一个项目依赖于某个库(称为直接依赖),而这个库又依赖于其他库(称为间接依赖)时,Maven 会自动将间接依赖引入到项目中,这就是依赖传递。

例如,项目 A 依赖于库 B,而库 B 又依赖于库 C。在配置项目 A 的 pom.xml 时,只明确声明了对 B 的依赖,但由于依赖传递,Maven 会自动将库 C 也引入到项目 A 的依赖中。

依赖传递有助于减少开发者手动配置依赖的工作量,同时也确保了项目中所使用的库之间的版本一致性。

然而,有时依赖传递可能会带来一些问题:

  1. 版本冲突:如果不同的直接依赖所传递的间接依赖存在不同的版本,可能会导致冲突。
    比如项目同时依赖库 D 和库 E,D 传递了库 F 的 1.0 版本,E 传递了库 F 的 2.0 版本,就可能出现问题。

  2. 不必要的依赖:可能会引入一些项目实际上并不需要的间接依赖,从而增加项目的复杂性和潜在的风险。

为了处理这些问题,Maven 提供了一些机制:

  1. <exclusions> 标签:可以在直接依赖的配置中排除某些不需要的间接依赖。

 右击打开图标,可以看到依赖传递的的图表展示(有点类似于类的继承

依赖排除(Dependency Exclusion)是 Maven 中用于处理依赖传递过程中不需要的间接依赖的一种机制。

在 Maven 项目的 pom.xml 文件中,当某个直接依赖引入了一些您不希望包含在项目中的间接依赖时,可以在导入这个依赖<dependency>标签里使用 <exclusions> 标签来进行排除

 

 3.依赖范围

依赖范围(Dependency Scope*在 Maven 中用于指定依赖在项目构建的不同阶段(如编译、测试、运行等)的有效性。

<scope>标签

 4.生命周期

Maven 生命周期是 Maven 构建项目的一系列阶段和步骤的有序集合。

Maven 主要包含以下三个基本的生命周期:

  1. clean 生命周期:

    用于清理项目,包含两个主要阶段:
    • clean:删除项目的生成目录,例如 target 目录。
    • pre-clean:执行一些在清理之前需要完成的工作。
  2. default 生命周期:

    这是 Maven 最核心的生命周期,包含了从项目编译、测试、打包到部署的整个过程。主要阶段有:
    • deploy:将项目部署到远程仓库。
    • install:将项目安装到本地 Maven 仓库,供其他项目依赖使用。
    • verify:对集成测试的结果进行检查,以确保满足质量标准。
    • package:将编译后的代码打包成可分发的格式,如 JAR、WAR 等。
    • test:运行测试用例。
    • test-compile:编译测试代码。
    • compile:编译项目的源代码。
    • validate:验证项目配置是否正确。
  3. site 生命周期:

    用于生成项目的站点文档,主要阶段有:
    • site-deploy:将生成的站点文档部署到指定的服务器。
    • post-site:在生成站点文档之后执行的一些后续处理。
    • site:生成项目的站点文档。
    • pre-site:在生成站点文档之前执行的一些准备工作。

每个阶段都由一个或多个 Maven 插件的目标(goal)来实现。

例如,在 compile 阶段,Maven 会调用相应的编译器插件来编译源代码。

当您在命令行中运行 mvn install 时,Maven 会按照 default 生命周期的顺序依次执行到 install 阶段的所有默认阶段(之前的所有生命周期都要经历)

tip:clean不会,因为clean()不是default生命周期

假设您正在开发一个 Java Web 应用,当您运行 mvn package 命令时,Maven 会依次执行 validatecompiletest-compiletest 等阶段,直到完成 package 阶段,将项目打包成 WAR 文件。

 

右侧Maven面板有相关操作指令 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值