Maven 基础

一、简介

Apache Maven 是一个(特别是Java编程)项目管理及自动构建工具,由Apache软件基金会所提供。
基于项目对象模型(缩写:POM)概念,Maven 利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

  • 官方网址:https://maven.apache.org

  • 下载地址:https://maven.apache.org/download.cgi

  • 依赖仓库:https://mvnrepository.com

1.1、作用

传统项目管理现状分析:jar 包不统一,jar 包不兼容,工程升级维护过程操作繁琐 …

  • 项目构建:提供标准的、跨平台的自动化项目构建方式。

  • 依赖管理:方便快捷的管理项目依赖,避免依赖之间的版本冲突问题。

  • 开发结构:提供标准的、统一的项目结构。

1.2、仓库

概念: 用于存储资源,包含各种 Jar 包。

  • 本地仓库: 自己电脑上存储资源的仓库,连接远程仓库获取资源。
  • 远程仓库: 非本机电脑上的仓库,为本地仓库提供资源。
    • 中央仓库: Maven 团队维护,存储所有资源 (开源) 的仓库。
    • 私服仓库: 部门或公司范围内存储资源的仓库,从中央仓库获取资源。
  • 私服作用:
    • 保护具有版权的资源,包含购买或自主研发的 jar。
    • 一定范围内共享资源,仅对内部开放,不对外共享。

1.3、坐标

坐标用于描述仓库中资源的位置。其作用为使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。

主要组成:

  • groupid:定义当前项目隶属组织名称,通常是域名反写,例如:org.mybatis 。
  • artifactid:定义当前项目名称,通常是模块名称,例如 CRM、EMP 。
  • version:定义当前项目版本号。

二、软件安装

下载地址:https://maven.apache.org/download.cgi

Maven 是绿色版软件,解压即安装,下载完毕后解压到指定目录即可。

环境要求: 依赖 Java,需要配置 JAVA_HOME,Maven 3.× 建议 JDK1.7+ 。

环境配置:

  • 新建一个系统变量,变量名:MAVEN_HOME,变量值:D:\Maven\apache-maven-3.8.3
  • 编辑Path系统变量,新建行:%MAVEN_HOME%\bin

测试安装: CMD命令窗口输入 mvn -v 能够正确输出版本信息则安装成功。

三、项目结构

在这里插入图片描述

四、依赖管理

4.1、依赖配置

依赖是指当前项目运行所需的 jar 包,一个项目可以配置多个依赖,配置依赖只需知道依赖的 Maven 坐标即可。

Maven 坐标指:groupid(组织ID)、artifactid(项目ID)、version(版本号)。

<project>
  <dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
    其它依赖...
  </dependencies>
</project>

4.2、依赖原理

中央仓库地址:https://repo.maven.apache.org/maven2/

坐标拼接格式:/{groupId}/{artifactId}/{version}/{artifactId}-{version}.jar

仓库地址+坐标拼接 = 下载地址:https://repo.maven.apache.org/maven2/org/mybatis/mybatis/3.5.9/mybatis-3.5.9.jar

4.3、依赖传递

好处: 可以传递的依赖不必在每个模块中都重复声明,在“最下面”的工程中依赖一次即可。

传递性:

  • 直接依赖:在当前项目 pom 文件中配置的依赖。
  • 间接依赖:在当前项目 pom 文件中配置了依赖 A,A 又依赖 B,则 B 为间接依赖。

冲突问题:

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

4.4、可选依赖

当前依赖是否对外显示,在依赖中通过配置 optional 标签,true / false 设置是否向下传递。

示例:A 项目 junit 依赖添加 optional 标签并且值设为 true,此时当 B 项目引入 A 项目时,看不到 A 项目下的 junit 依赖。

<!-- A项目依赖 -->
<dependencies>
    <!-- 可选依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <optional>true</optional>
    </dependency>
    其它依赖...
</dependencies>

4.5、排除依赖

主动排除依赖,在依赖中通过配置 exclusions 标签,指定被排除依赖的组织ID和项目ID即可。

示例:A 项目配置了 junit 依赖,junit 依赖本身又依赖了 hamcrest-core 依赖,此时不用 hamcrest-core 依赖,通过 exclusions 标签并指定组织ID和项目ID将其排除。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <!-- 排除依赖 -->
        <exclusions>
            <exclusion>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    其它依赖...
</dependencies>

4.6、依赖范围

依赖的 jar 包默认情况可以在任何地方使用,可以通过 scope 标签设定其作用范围。

主程序(main 文件夹范围内有效)、测试程序(test 文件夹范围内有效)、是否打包(package 指令范围内)。

scope主程序测试程序打包示例
compile(默认)log4j
testjunit
providedservlet-api
runtimejdbc

带有依赖范围的资源进行依赖传递时,作用范围将受到影响。
在这里插入图片描述

五、常用命令

命令:

  • 清理:mvn clean

  • 编译:mvn compiler

  • 编译测试源码:mvn test-compile

  • 测试:mvn test

  • 打包:mvn package

  • 安装:mvn install

  • 部署:mvn deploy

参数:

  • -DskipTests:不执行测试用例,但编译测试用例类。
  • -Dmaven.test.skip=true:不执行测试用例,也不编译测试用例类。

使用

  • mvn 命令 … [参数]

六、生命周期

在这里插入图片描述

  • 清理:清理上次的编译结果并为下次编译做准备。
  • 编译:源代码编译在此阶段完成。
  • 测试:使用单元测试框架运行测试后以标准格式记录和展示测试结果。
  • 打包:创建 jar 或 war 包。
  • 安装:安装打包的项目到本地仓库。
  • 部署:拷贝最终的项目包到远程仓库中或部署到服务器。

当执行相应命令时,会依次从左往右执行对应操作:

操作编译测试打包安装发布
mvn compile
mvn test
mvn package
mvn install
mvn deploy

运行任何一个阶段的时候,它前面的所有阶段都会被运行。例如我们运行安装的时候,代码会被 编译,测试,打包,最后安装打包的项目到本地仓库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值