Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。
您曾经是否会遇到这些问题:
1.我们要开发一个 Java 项目,为了保证编译通过,我们会到处去寻找 jar 包。当编译通过了,在运行的时候,却发现 ClassNotFoundException,卧槽!还差 jar 包啊?再去找找吧。
2.每个 Java 项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在哪里,没有一个权威的规范。
3.可使用 Ant 做为项目构建工具,它可以自动化地完成编译、测试、打包等任务,确实为我们省了不少事儿,但编写 Ant 的 XML 脚本绝非是一件轻松的事情。
有了 Maven,以上这一切都不再是问题了。
看来Maven 要做的是两件事情:1.统一开发规范与工具;
2.统一管理 jar 包。
一、使用前提
maven根路径PATH = maven根路径/bin
maven根路径/bin3.配置好之后,我们就可以执行maven命令了
mvn -v 显示maven版本信息
二、了解 Maven 仓库
图解本地仓库与中央仓库maven查找依赖的顺序maven查找依赖的顺序
三、理解 pom.xml
pom.xml 称为 Project Object Model(项目对象模型),它用于描述整个 Maven 项目,所以也称为 Maven 描述文件。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.smart</groupId>
<artifactId>smart-demo</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>smart-demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>smart-demo</finalName>
</build></project>
从上往下简要说明:
modelVersion:这个是 POM 的版本号,现在都是 4.0.0 的,必须得有,但不需要修改。
groupId、artifactId、version:分别表示 Maven 项目的组织名、构件名、版本号,它们三个合起来就是 Maven **坐标,根据这个坐标可以在 Maven 仓库中对应唯一的 **Maven 构件。
packaging:表示该项目的打包方式,war 表示打包为 war 文件,默认为 jar,表示打包为 jar 文件。
name、url:表示该项目的名称与 URL 地址,意义不大,可以省略。
dependencies:定义该项目的依赖关系,其中每一个 dependency 对应一个 Maven 项目,可见 Maven 坐标再次出现,还多了一个 scope,表示作用域(下面会描述)。
build:表示与构建相关的配置,这里的 finalName 表示最终构建后的名称 smart-demo.war,这里的 finalName 还可以使用另一种方式来定义。
除了项目的基本信息(Maven 坐标、打包方式等)以外,每个 pom.xml 都应该包括:
Lifecycle(生命周期)
Plugins(插件)
Dependencies(依赖)
Lifecycle 是项目构建的生命周期,它包括 9 个 Phase(阶段)。
大家知道,Maven 是一个核心加上多个插件的架构,而这些插件提供了一系列非常重要的功能,这些插件会在许多阶段里发挥重要作用。
阶段插件作用:
clean
clean 清理自动生成的文件,也就是 target 目录
validate
由 Maven 核心负责 验证 Maven 描述文件是否有效
compile
compile 编译后产生target目录,里面存放的就是编译后的字节码文件
test
compiler、surefire、resources 运行测试代码
package
war 项目打包,就是生成构件包,也就是打 war 包
verify
由 Maven 核心负责,验证构件包是否有效
install
install 将构件包安装到本地仓库
site
site 生成项目站点,就是一堆静态网页文件,包括 JavaDoc
deploy
deploy 将构件包部署到远程仓库
四、使用 Maven 命令
可使用两种不同的方式来执行 Maven 命令:
方式一:mvn <插件>:<目标> [参数]
方式二:mvn <阶段>
现在我们接触到的都是第一种方式,而第二种方式才是我们日常中使用最频繁的,例如:
mvn clean:清空输出目录(即 target 目录)
mvn compile:编译源代码
mvn package:生成构件包(一般为 jar 包或 war 包)
mvn install:将构件包安装到本地仓库
mvn deploy:将构件包部署到远程仓库
执行 Maven 命令需要注意的是:必须在 Maven 项目的根目录处执行,也就是当前目录下一定存在一个名为 pom.xml 的文件。