1.基本概念
1.1.什么是Maven
Maven项目对象模型(Project Object Model),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven提供了开发人员构建一个项目完整的生命周期框架。
开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
1.2.Maven的主要功能
依赖的管理:仅仅通过jar包的几个属性,就能确定唯一的jar包,在指定的文件pom.xml中,只要写入这些依赖属性,就会自动下载并管理jar包。
项目的构建:内置很多的插件与生命周期,支持多种任务,比如校验、编译、测试、打包、部署、发布…
项目的知识管理:管理项目相关的其他内容,比如开发者信息,版本等等
2.安装
2.1.maven的资源
官网:http://maven.apache.org/
教程:https://www.yiibai.com/maven/
2.2.安装步骤
2.2.1.下载解压
到官网下载指定的版本后,
将zip压缩文件解压到某个方便找到的位置
注意路径不要有中文
2.2.2.JDK环境变量
使用 Maven 需要 JDK的支持, 所以安装maven之前, 必须先确保你的机器中已经安装了JDK, 并配置了环境变量
如果是Maven3则必须JDK1.7以上
右击 此电脑 > 属性 > 高级系统设置 > 高级 > 环境变量
在 系统变量
查找, 如果有 JAVA_HOME 或者 在Path 中是否配置 JDK的路径, 如果没有可以添加一个
变量值 要指向 JDK的安装路径
并且要将 JAVA_HOME 配置到Path变量中 %JAVA_HOME%\bin
2.2.3.Maven变量
再添加环境变量M2_HOME,值为Maven的安装路径( 解压路径 )
2.2.4.配置Path
在Path环境变量的变量值中 添加 %M2_HOME%\bin ,
注意不要超过 JAVA_HOME的位置 , 排序也不要太低
2.2.4.在cmd测试
打开指令界面( 在开始菜单中通过 运行 cmd )
输入
mvn -v
如果出现maven的版本信息,说明配置成功。
3.Maven的仓库
3.1.仓库分类
3.1.1.本地仓库
Maven主要功能之一, 就是帮助应用项目导入依赖jar.
原来要将jar文件导入到应用项目中, 是一个非常麻烦的过程
现在jar文件存放在本地仓库中, 如 : D://repository
应用项目只是通过pom.xml 文件说明依赖关系就可以, 实现了应用项目与jar文件的解耦
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
3.1.2.远程仓库
本地仓库的jar文件是从远程仓库下载的, 远程仓库又有三种:
中央仓库 : 是Maven提供的真正存放jar文件的服务器, 可以通过网络访问并下载, 如:
http://www.sonatype.org/nexus/
http://mvnrepository.com/
http://repo1.maven.org/maven2
**镜像仓库 : ** 一般是有好心的网站提供的,是对中央仓库进行复制, 通常使用这类仓库速度更快, 如:
阿里的 https://maven.aliyun.com/repository/public
**私服 : ** 是个别公司针对自己公司搭建内部使用的Maven服务器, 除了官方提供的jar文件, 还有公司内部的一些自己封装的jar文件
3.2.配置仓库地址
在 Maven 工具的 /conf文件夹下 Settings.xml 文件中 可以配置 仓库信息
3.2.1.本地仓库
配置本地仓库, 默认在用户的文件夹下, 可以修改成其它目录, 如: d:/repository
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>d:/repository</localRepository>
3.2.2.远程仓库
可以将默认修改成阿里云提供的镜像仓库
<!-- mirrors
| This is a list of mirrors to be used in downloading artifacts from remote repositories.
|
| It works like this: a POM may declare a repository to use in resolving certain artifacts.
| However, this repository may have problems with heavy traffic at times, so people have mirrored
| it to several places.
|
| That repository definition will have a unique id, so we can create a mirror reference for that
| repository, to be used as an alternate download site. The mirror site will be the preferred
| server for that repository.
|-->
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
4.资源描述
在 Maven 中 使用三级信息来区别每一个jar文件, 分别是:
groupId
: 组织名, 可以是多个单词使用 .
连接, 定义当前Maven项目隶属的实际项目。
artifactId
: 项目名, 通常只有一个单词, 要想多个单词使用 -
连接, 定义实际项目中的一个Maven项目(模块),
推荐的做法是使用实际项目名称作为artifactId的前缀。
version
: 版本号, 无格式要求, 代表不同的版本
如 :
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
其它属性 :
packaging
: 该元素定义Maven项目的打包方式。常用为 jar, war , pom几种
classifier
: 该元素用来帮助定义构建输出的一些附属构建。
scope
: 作用域, Maven默认的依赖配置项中,scope的默认值是compile,
选项 | 说明 |
---|---|
compile | 是默认值, 表示被依赖项目需要参与当前项目的编译 |
runtime | 表示该依赖不会参与到项目的编译,但是会参与测试,运行周期。与compile相比,就是跳过了编译而已。 |
test | 表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。 |
provided | 意味着打包的时候可以不用包进去,需要别的设施去提供,例如项目的使用方提供SDK包下引用的日志依赖、web 容器提供servlet相关依赖。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。 |
system | system 元素与 provided 元素类似,但是被依赖项不会从 maven 仓库中查找,而是从本地系统中获取,systemPath 元素用于制定本地系统中 jar 文件的路径。这个一定要配合systemPath标签使用,指定自定义jar包的路径 |
import | import比较特殊,它只使用在dependencyManagement标签中,表示从其它的pom中导入dependency的配置,打包类型package为pom,例如 (B项目导入A项目中的包配置)。 |