Maven

Maven简介

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

* 提供了一套标准化的项目结构

* 提供了一套标准化的构建流程(编译,测试,打包,发布……)

* 提供了一套依赖管理机制

Maven模型

  • 项目对象模型 (Project Object Model)
  • 依赖管理模型(Dependency)
  • 插件(Plugin)

仓库

仓库分类:

    本地仓库:自己计算机上的一个目录

    中央仓库:由Maven团队维护的全球唯一的仓库(地址: https://repo1.maven.org/maven2/)
  
    远程仓库(私服):一般由公司团队搭建的私有仓库

jar包的查找顺序:
image-20210721185303106

Maven基本使用

Maven安装配置

  • 解压 apache-maven-3.6.1.rar 既安装完成

    解压缩后的目录结构如下:
* bin目录 : 存放的是可执行命令。mvn 命令重点关注。
* conf目录 :存放Maven的配置文件。`settings.xml` 配置文件后期需要修改。
* lib目录 :存放Maven依赖的jar包。Maven也是使用java开发的,所以它也依赖其他的jar包。
  • 配置环境变量 MAVEN_HOME 为安装路径的bin目录

    image-20210721185303106
    打开命令提示符进行验证,出现如图所示表示安装成功
  • 配置本地仓库
    修改 conf/settings.xml 中的 为一个指定目录作为本地仓库,用来存储jar包。
  • 配置阿里云私服
    中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。
    修改 conf/settings.xml 中的 标签,为其添加如下子标签:
<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>          
</mirror>

Maven 常用命令

* mvn compile :编译

* mvn clean:清理

* mvn test:测试

* mvn package:打包

* mvn install:安装

Maven 生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件

Maven 对项目构建的生命周期划分为3套:

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

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

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

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

IDEA配置Maven

  • 选择 IDEA中 File --> Settings,搜索 maven
  • 设置 IDEA 使用本地安装的 Maven,并修改配置文件路径

IDEA创建Maven项目

  • 创建模块,选择Maven,点击Next!
  • 填写模块名称,坐标信息,点击finish,创建完成

注意:创建完成后生成的pom.xml可能需要添加如下配置:

<properties>
    <maven.compiler.source>8</maven.compiler.source>  JDK的编译版本
    <maven.compiler.target>8</maven.compiler.target>
</properties>

IDEA导入Maven项目

  • 选择右侧Maven面板,点击 + 号
  • 选中对应项目的pom.xml文件,双击即可
  • 如果没有Maven面板,选择
  • 配置 Maven-Helper 插件
    选择 IDEA中 File --> Settings --> 选择 Plugins --> 搜索 Maven,选择第一个 Maven Helper,点击Install安装 --> 重启 IDEA

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

IDEA创建Web项目

Web项目的结构分为:开发中的项目和开发完可以部署的Web项目,这两种项目的结构是不一样的

  • Maven Web项目结构: 开发中的项目
  • 开发完成部署的Web项目
* 开发项目通过执行Maven打包命令package,可以获取到部署的Web项目目录
* 编译后的Java字节码文件和resources的资源文件,会被放到WEB-INF下的classes目录下
* pom.xml中依赖坐标对应的jar包,会被放入WEB-INF下的lib目录下

创建Web项目方式有两种:使用骨架和不使用骨架

使用骨架,具体的步骤包含:

1.创建Maven项目
2.选择使用Web项目骨架
3.输入Maven项目坐标创建项目
4.确认Maven相关的配置信息后,完成项目创建
5.删除pom.xml中多余内容
6.补齐Maven Web项目缺失的目录结构

不使用骨架,具体的步骤包含:

1.创建Maven项目
2.选择不使用Web项目骨架
3.输入Maven项目坐标创建项目
4.在pom.xml设置打包方式为war
5.补齐Maven Web项目缺失webapp的目录结构
6.补齐Maven Web项目缺失WEB-INF/web.xml的目录结构

依赖管理

Maven 坐标详解

什么是坐标?

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

Maven 坐标主要组成

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

依赖配置

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

<!--设置当前项目所依赖的所有1ar-->
<dependencies>
    <dependency>
    <!一设置具体的依赖-->
    <dependency>
        <!一依赖所属群组id-->
        <groupId>junit</groupId>
        <!一依赖所属项目1d-->
        <artifactId>junit</artifactId>
        <!一依赖版本号-->
        <version>4.12</version>
</dependency>
</dependencies>

注意:
* 点击刷新按钮,使坐标生效
* 具体的坐标我们可以到如下网站进行搜索
* https://mvnrepository.com/

快捷方式导入jar包的坐标:
每次需要引入jar包,都去对应的网站进行搜索是比较麻烦的,接下来给大家介绍一种快捷引入坐标的方式

  • 在 pom.xml 中 按 alt + insert,选择 Dependency
  • 在弹出的面板中搜索对应坐标,然后双击选中对应坐标
  • 点击刷新按钮,使坐标生效

自动导入设置:
上面每次操作都需要点击刷新按钮,让引入的坐标生效。当然我们也可以通过设置让其自动完成

  • 选择 IDEA中 File --> Settings
  • 在弹出的面板中找到 Build Tools, 选择 Any changes,点击 ok 即可生效

依赖传递

依赖具有传递性:
    * 直接依赖:在当前项目中通过依赖配置建立的依赖关系
    * 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖冲突

依赖传递冲突问题:

* 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
* 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
* 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

可选依赖

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

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <optional>true</optional>    <!--设置 optional 标签值为 true 隐藏当前所依赖的资源-->
</dependency>

排除依赖

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

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <exclusions>        <!--使用 exclusion 排除不需要的依赖-->
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>  
        </exclusion>
    </exclusions>
</dependency>

依赖范围

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

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

注意:

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

依赖范围传递性:带有依赖范围的资源在进行传递时,作用范围将受到影响

posted @ 2022-11-22 21:39  晚点心动。  阅读(87)  评论(0)    收藏  举报