Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。它包含了一个项目对象模型(ProjectObjectModel),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(DependencyManagementSystem),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后通过maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven 除了程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可用性,所有常常用两三行Maven 构架脚本就可以构建简单的项目。
1.下载Maven
maven的下载:http://maven.apache.org/download.cgi
选择当前最新的版本"apache-maven-3.8.1-bin.zip",下载到本地。
2.安装Maven
Maven版本不同需要的环境版本也不同,3.8.1版本的Maven需要JDK1.7及以上的版本。apache-maven-3.8.1-bin.zip 直接解压即可。
3.设置Maven的环境变量
- 找到系统的环境设置,在系统变量中,添加新的系统变量,如下图:
变量值要写自己解压过后的路径,路径不要出现中文。 - 接下来编辑Path变量,加入%MAVEN_HOME%\bin,如下图:
- 在命令行中输入命令 mvn -v 检查是否配置成功,如下图:
4.认识Maven仓库和POM文件
Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库和中央仓库。当项目编译时,Maven首先从本地仓库中寻找项目所需的jar包,若本地仓库没有,再到Maven的中央仓库下载所需的jar包。
本地仓库:Maven本地的jar包分库。
中央仓库:Maven官方提供的远程仓库。
pom.xml 文件是maven项目的配置文件,可选项的配置有很多,常用配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<!-- 模型版本。maven2.0必须这样写,现在是maven2唯一支持的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标识,并且配置时生成的路径也是由此而生,如com.gxy.ssm,maven会将该项目打成的jar包放本地路径:/com/gxy/ssm -->
<groupId>com.gxy.ssm</groupId>
<!-- 本项目的唯一ID,一个groupId下面可能有多个项目,就是靠artifactId区分 -->
<artifactId>ssm</artifactId>
<!-- 本项目目前所处的版本号 -->
<version>1.0-SNAPSHOT</version>
<!-- 打包的机制,如pom,jar,maven-plugin,war,ear,rar,par,默认为jar -->
<packaging>war</packaging>
<!-- 定义本项目的依赖关系 -->
<dependencies>
<!-- 每个dependency对应一个jar包 -->
<dependency>
<!-- 一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构建,然后引入你的工程。
如果别人想引入你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),
就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入,
maven就会把你上传的jar包下载到他的本地 -->
<groupId>com.gxy.ssm</groupId>
<artifactId>ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所有maven中的依赖关系有作用域(scope)的限制。 -->
<!-- scope包含如下的取值:compile(编译范围)、provided(以提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->
<scope>test</scope>
<!-- 设置依赖是否可选,默认false,即子项目默认都继承:为true,则子项目必须显式的引入,与dependencyManagement里定义的依赖相似 -->
<optional>false</optional>
<!-- 屏蔽依赖关系。比如项目中使用的libA依赖某个库的1.0版本,libB依赖某个库的2.0版本,现在想统一使用2.0版本,就可以屏蔽掉对1.0版本的依赖 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
5.Maven坐标
在Maven中,坐标是jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的jar包。
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.2.10</version>
<scope>test</scope>
</dependency>
如上所示,groupId和artifactId构成了一个jar包的坐标。
groupId:所需jar包的项目名
artifactId:所需jar包的模块名
version:所需jar包的版本号
scope:依赖范围,默认范围是compile