超详细的Maven教程

一、Maven的简介和安装

1、什么是Maven? 

Maven 是apache软件基金会组织中唯一的一个自动化构建工具,专注于java平台项目的构建和依赖管理。

依赖管理:就是对jar包的管理。通过导入maven坐标,就相当于将仓库中的jar包导入了当前项目中。

项目构建:通过maven的一个命令就可以完成项目从清理、编译、测试、报告、打包,部署整个过程。

2、为什么要使用Maven?*四个特点

  1. 添加第三方依赖(jar包):以前添加各种jar包采取复制粘贴到项目中的方式,每次创建一个新的项目,如果需要使用第三方的jar包,都要放到项目中,会造成项目中jar包占了大部分内容。会造成工作空间中jar包占据了很大的地方。maven通过第三方仓库来解决jar包重复的问题。将所有的jar包都放到仓库中,项目要使用jar包只需要做依赖。
  2. 解决jar之间的依赖关系:一般使用的第三方jar包,有的jar包在使用过程中对其他的jar包有依赖关系。比如c3p0jar包,在使用的时候必须同时添加mc...,如果忘记添加,项目启动就会出现异常。在maven中,需要导入对应的一个依赖(jar包),该jar包依赖包就会自动导入。
  3. 获取第三方依赖:maven如果在本地仓库中引入的依赖是不存在的,会自动去官方仓库去下载对应的jar包。官方网站地址:https://mvnrepository.com
  4. 可以将项目拆分开发:如果在大型项目中通过多人配置来做项目,每个人负责开发一部分,怎么划分项目,如果在一个中小型的公司,可以将项目安装package的方式拆分,如果项目开发人太多,通过package拆分就不合适,maven就可以将一个项目拆分成多个。

3、什么是构建?

项目的构建就是将我们开发的项目(java代码、配置文件、静态资源,jsp)作为“原材料”去生产一个可以运行的项目的过程。

一般的项目构建分为下面几个阶段:

  1. 清理:将原来生成的编译结果删除,为重新编译做准备工作
  2. 编译:将JAVA源程序编译为字节码文件
  3. 测试:针对项目的关键点进行测试,确保项目在迭代开发中关键点正确。
  4. 报告:在每次测试后以标准的格式记录和展示测试结果
  5. 打包:将一个包含多个文件的项目加工成对应的压缩包,java项目打包成jar,web项目打包成war;
  6. 安装:在maven中独有的,将一个项目打包后安装到本地仓库。
  7. 部署:将jar包部署到远程仓库或者将war包部署到服务器。

而通过 Maven,开发人员可以简化项目的构建流程,统一管理项目的依赖库、编译、测试和打包等操作,提高项目构建的效率和可维护性,所谓自动化构建

4、Maven的安装和配置*

① Maven的下载

官网地址:Maven – Welcome to Apache Maven

② Maven的安装

在安装前确保java安装是没有问题的:

①解压缩:

解压后的根目录:

bin:可执行文件

boot:引导目录

conf:配置文件   我们如果要修改maven的配置 都在改目录下

lib:jar包

打开conf:

logging:日志  maven的运行日志  如果maven启动出现问题  可以在日志中查找

setting:maven的配置文件  所有的配置都在该文件中

②配置环境变量

和java配置环境变量一样

配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录)

配置后使用cmd查看是否配置成功:

③Maven的配置settings.xml

1、修改本地仓库地址

默认是放在系统盘:

在系统中创建一个文件夹,用来做maven的本地仓库,建议大家叫repository

打开根目录下conf文件夹中的setting.xml文件:

2、修改中央仓库地址,为了加快下载的速度,配置阿里镜像或者华为镜像

3、配置jdk的版本号

二、Maven的工程的认识

1、Maven工程的目录结构

作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。 进入 src 目录后,我们发现它里面的目录结构如下:

src/main/java —— 存放项目的.java 文件

src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件

src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类

src/test/resources —— 测试资源文件

target —— 项目输出位置,编译后的 class 文件会输出到此目录

pom.xml——maven 项目核心配置文件

注意:如果是普通的 java 项目,那么就没有 webapp 目录。

2、Maven的生命周期

Maven 的生命周期是指一系列相互关联的构建阶段,它定义了项目构建过程中的不同阶段和顺序。Maven 的生命周期由一组预定义的阶段(Phase)组成,每个阶段都与特定的构建任务相关联。以下是 Maven 的三个标准生命周期:

  1. Clean 生命周期
    • clean:清理项目,删除生成的构建输出目录。
  1. Default 生命周期
    • validate:验证项目是否正确且所有必需的信息可用。
    • compile:将项目的源代码编译为可执行的字节码。
    • test:运行项目的单元测试。
    • package:将编译后的代码打包到可分发的格式中,如 JAR 或 WAR。
    • verify:对集成测试的结果进行检查,以保证质量标准。
    • install:将项目打包安装到本地 Maven 仓库,供其他项目使用。
    • deploy:将项目打包部署到远程仓库或服务器。
  1. Site 生命周期
    • site:生成项目的站点文档。
    • site-deploy:将生成的站点文档部署到远程服务器。

Maven 的生命周期是依次执行的,例如执行 mvn install 命令时,Maven 将按照 Clean 生命周期、Default 生命周期和 Site 生命周期的顺序依次执行相应的阶段。每个生命周期都由一系列插件目标(Goal)组成,这些目标定义了具体的构建任务。

除了默认的生命周期,Maven 还允许用户自定义生命周期和插件目标,以满足特定项目的需求。通过配置项目的 pom.xml 文件,可以添加自定义的生命周期和插件目标,或者覆盖默认生命周期中的某些阶段。

三、Maven的依赖管理*

1、Maven的核心概念

maven能够自动化部署项目,和核心概念是分不开的,我们从核心概念入手来查看mavne如何自动化部署的。

① pom.xml

POM(project Object Model)项目对象模型 ,在maven中使用管理对象的方法来管理项目。将所有的项目信息都封装到pom.xml文件中。pom文件就是maven的核心。我们学习maven就是学习pom文件是怎么配置的。

② 约定的目录结构

约定的目录结构对于maven来说是实现自动化部署不可缺的一步,,我们如果想让maven自动化进行对应的步骤,首先需要告诉maven我们的java文件、静态资源在哪个文件下存放,告诉系统存放文件位置有两种方式:配置和约定,maven使用的约定,提前定义好文件存放的位置:

③ maven的仓库 *

maven的仓库分两种:

(1)本地仓库

  maven在当前电脑中存放jar包的或者插件的地方。

(2)远程仓库

  如果maven本地仓库没有的jar包  会去远程仓库去查找:

  ①中央仓库   --官方创建的仓库  里面包含了几乎所有的jar包

  ②中央仓库镜像   在各大洲都创建中央仓库镜像--作用:提高用户的访问速度

  ③私服   局域网中创建一个仓库  让局域网中所有人都在私服中下载资源,如果私服也没有对应的资源,就会去中央仓库去下载。

④ maven的坐标

在日常生活中的坐标:

使用经纬度  x,y两个向量就可以表示平面的一个点

使用三个向量x,y,z来表示有高度的一个点

mavne中使用三个向量来表示一个jar包的位置:

groupid    组id

artifactid   项目或者组件id

version     版本号

2、Maven的常用命令

(1)清理 mvn clean

(2)编译命令  mvn  compile

(3)测试  mvn test

(4)打包命令  mvn package

(5)安装命令  mvn install  将jar包安装到本地仓库

3、Maven的依赖传递

1、什么是maven的依赖?*

当一个项目配置了对应的jar包  该jar包就叫做当前项目的依赖

2、什么是依赖的传递?*

在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。

通过上面的图可以看到,我们的web项目直接依赖了spring-webmvc,而spring-webmvc依赖了sping-aop、spring-beans等。最终的结果就是在我们的web项目中间接依赖了spring-aop、spring-beans等。

3、依赖的范围scope*

依赖范围

对于编译classpath有效

对于测试classpath有效

对于运行时classpath有效

例子

compile

Y

Y

Y

spring-core

test

-

Y

-

Junit

provided

Y

Y

-

servlet-api

runtime

-

Y

Y

JDBC驱动

system

Y

Y

-

本地的,maven仓库之外的类库

4、什么是依赖冲突?

由于依赖传递现象的存在, spring-webmvc 依赖 spirng-beans-4.2.4,spring-aop 依赖 spring-beans-5.0.2,但是发现 spirng-beans-4.2.4 加入到了工程中,而我们希望 spring-beans-5.0.2 加入工程。这就造成了依赖冲突。

5、如何解决依赖冲突?

①依赖调节原则---第一声明者优先原则

在 pom 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖。

结论:通过上图可以看到,spring-aop和spring-webmvc都传递过来了spring-beans,但是因为spring-aop在前面,所以最终使用的spring-beans是由spring-aop传递过来的,而spring-webmvc传递过来的spring-beans则被忽略了。

②排除依赖

可以使用exclusions标签将传递过来的依赖排除出去。

③版本锁定

采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中,此方法在企业开发中经常使用。

版本锁定的使用方式:

第一步:在dependencyManagement标签中锁定依赖的版本

第二步:在dependencies标签中声明需要导入的maven坐标

①在dependencyManagement标签中锁定依赖的版本

②在dependencies标签中声明需要导入的maven坐标

 

  • 42
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值