Maven-基础

概述:本文主要记录Maven工具的思想和基本用法。包括环境配置,基础概念,项目构建,依赖管理等部分

Maven简介

传统项目管理状态分析

(1)jar包不统一,jar包不兼容

(2)工程升级维护过程繁琐

Maven是什么

本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM,Project Object Model)

Maven的作用

(1)项目构建:提供标准的、跨平台的自动化项目构建方式

(2)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题

(3)统一开发结构:提供标准的、统一的项目结构

环境配置

下载与安装

官网

解压即安装

环境变量配置

(1)依赖Java,需要配置JAVA_HOME

(2)设置MAVEN自身的运行环境,需要配置MAVEN_HOME(复制所在路径,在系统变量和环境变量中都加以设置)

配置完成后可以在cmd中输入 mvn 检查是否成功

MAVEN基础概念

仓库

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

仓库分类:

  1. 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源

  2. 远程仓库:非本机电脑上的仓库,为本地仓库提供资源

    (1)中央仓库:Maven团队维护,存储所有字眼的仓库

    (2)私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

  3. 私服的作用:

    (1)保存具有版权的资源,包含购买或自主研发的jar,中央仓库中的jar都是开源的,不能存储具有版权的资源

    (2)一定范围内共享资源,仅对内部开放,不对外共享

坐标

坐标:

用于在Maven中描述仓库中资源的位置。 https://repo1.maven.org/maven2/

Maven坐标主要组成:

(1)groupID:定义当前Maven项目隶属组织名称

(2)artifactID:定义当前Maven项目名称(通常是模块名称)

(3)version:定义当前项目版本号

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

Maven坐标的作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

https://www.mvnrepository.com

本地仓库配置

本地仓库配置决定了资源下载到哪里

命令行中输入mvn 即可在 C:\Users\win10 中生成一个空的 .m2文件夹,为默认的仓库

如果想要将本地仓库设置在别的位置,需要如下配置:

(1)打开Maven目录下(我的电脑在 F:\Tools\apache-maven-3.8.5\conf)的settings.xml

(2)将文件中<localRepository>/path/to/local/repo</localRepository>复制到下一行未被注释的地方,并将其中路径换成我们自己决定的repository文件夹的位置

1
<localRepository>F:\MyDocuments\Maven\repository</localRepository>

远程仓库的配置

远程仓库决定了资源从哪里来

默认是从https://repo1.maven.org/maven2/ 中下载的(不挂梯子会比较慢)

镜像仓库配置(阿里云)

全局setting与用户setting的区别

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

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

项目构建

Maven项目构建命令(手动制作)

需要在项目目录带有pom.xml层级下进行执行

Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔

1
2
3
4
5
mvn compile			#编译
mvn clean #清理
mvn test #测试
mvn package #打包
mvn install #安装到本地仓库

插件创建工程

IDEA创建工程

依赖管理

依赖配置

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

格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--指定了当前pom的版本,4.0.0是固定的 -->
<modelVersion>4.0.0</modelVersion>

<!-- 主项目标识,用来定义当前maven属于哪个实际的项目 -->
<groupId>反写的公司网址 + 项目名</groupId>
<!-- 模块名,maven项目和实际的项目不是一一对应的关系,maven项目提现的是模块化的概念,一个实际项目往往会被划分为很多个模块 -->
<artifactId>项目名 + 模块名</artifactId>
<!-- 当前项目版本号,一般有三个数字组成 第一个数字:大版本号 第二个数字:分支版本号 第三个数字:先版本号 snapshot: 快照 alpha:
内测版本 beta: 公测版本 Release: 稳定版本 GA: 正式发布版本 -->
<version>0.0.1snapshot</version>
<!-- maven项目打包方式,默认情况为jar,还可打包为war,zip,pom等 -->
<packaging></packaging>
<!-- 项目描述名 -->
<name></name>
<!-- 项目地址 -->
<url></url>
<!-- 项目描述 -->
<description></description>
<!-- 开发人员列表 -->
<developers></developers>
<!-- 许可证信息 -->
<licenses></licenses>
<!-- 组织信息 -->
<organization></organization>

<!-- 依赖列表 -->
<dependencies>
<!-- 依赖项目 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<type></type>
<!-- 依赖范围,控制依赖与三种依赖范围的关系 -->
<!-- 开发中要使用某一个jar,就要将该jar包引入到项目的classpath中 -->
<!-- maven提供了三种classpath: 1.编译 2.测试 3.运行 -->
<!-- 下面的test表明junit只存在于测试的classpath中 -->
<!-- maven为scope提供了六个属性:
compile(默认,编译测试运行都有效),
provided(编译和测试)servlet,
runtime(测试和运行)jdbc,
test(测试)junit,
system(编译和测试,与本机系统相关联,可移植性差),
import(导入的范围,只使用在dependencyManagerment中,表示从其他的pom中导入dependency的配置) -->
<scope>test</scope>
<!-- 设置依赖是否可选 -->
<!-- 有两个值,true和false,默认是false,继承,若为true,子项目必须显式的引用该依赖 -->
<optional></optional>
<!-- 排除依赖传递的列表 -->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<!-- 依赖管理 -->
<dependencyManagement>
<!-- 这里定义的依赖不会被运行,即不会被引用为实际的依赖,主要是供子模块集成用 -->
<dependencies>
<dependency></dependency>
</dependencies>
</dependencyManagement>

<!-- 为构建行为提供相应的支持 -->
<build>
<!-- 插件列表 -->
<plugins>
<!-- 插件 -->
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>

<!-- 用于子模块中对于父模块的继承 -->
<parent></parent>
<!-- 聚合运行多个maven项目 -->
<modules>
<module></module>
</modules>

</project>

依赖传递

依赖具有传递性:

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

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

依赖范围

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

作用范围:

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

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

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

image1

依赖范围传递性

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

image2

生命周期与插件

项目构建生命周期

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

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

(1)clean:清理工作

(2)default:核心工作,例如编译,测试,打包,部署等

(3)site:产生报告,发布站点等

插件

maven官网提供的插件

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

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

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

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022 ZHU
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信