Preface
Maven 是一个项目管理和整合工具。Maven为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为Maven使用了一个标准的目录结构和一个默认的构建生命周期。
在有多个开发团队环境的情况下,Maven能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven可以让开发者的工作变得更简单。
Maven 的主要目的是为开发者提供
- 一个可复用、可维护、更易理解的工程综合模型
- 与这个模型交互的插件或者工具
Maven 使用约定而不是配置,意味着开发者不需要再自己创建构建过程。
开发者不需要再关心每一个配置细节。Maven 为工程提供了合理的默认行为。当创建 Maven 工程时,Maven 会创建默认的工程结构。开发者只需要合理的放置文件,而在pom.xml中不再需要定义任何配置。
举例说明,下面的表格展示了工程源码文件、资源文件的默认配置,和其他一些配置。假定 ${basedir}表示工程目录:
配置项 | 默认值 |
source code | ${basedir}/src/main/java |
resources | ${basedir}/src/main/resources |
Tests | ${basedir}/src/test |
Complied byte code | ${basedir}/target |
distributable JAR | ${basedir}/target/classes |
1.Maven-环境配置
1.1. Maven下载
从以下网址下载 Maven:http://maven.apache.org/download.html
1.2. 解压Maven
将下载好的Maven解压到相应目录,解压后的目录结构如下图
1.3. 设置Maven环境变量
添加 M2_HOME、M2、MAVEN_OPTS到环境变量中。
M2_HOME= D:\Program Files\apache-maven-3.3.9
M2=%M2_HOME%\bin
MAVEN_OPTS=-Xms256m -Xmx512m
添加字符串 “;%M2%” 到系统“Path”变量末尾
1.4. 验证Maven安装
2. Maven使用
每一个Maven项目都有一个pom.xml的配置文件.通过pom.xml可以配置项目的依赖,项目的打包方式等.
2.1. pom举例
每个工程应该只有一个 POM文件。
- 所有的 POM 文件需要project元素和三个必须的字段:groupId, artifactId,version。
- 在仓库中的工程标识为 groupId:artifactId:version
- POM.xml 的根元素是project,它有三个主要的子节点
groupId | 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank拥有所有的和银行相关的项目。 |
artifactId | 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了artifact在仓库中的位置。 |
version | 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking:1.0 |
2.2. 项目类型
Maven项目的类型根据配置文件中的Packaging决定.
打包方式常见的有三种:
- jar:java项目<packaging>jar</packaging>
- war:web项目<packaging>war</packaging>
- pom:parent项目<packaging>pom</packaging>
2.3. Maven的标准目录结构
在构建maven项目时需要遵循标准的目录结构.
一般情况下:所有的源码都放在java目录下,所有的资源文件或者配置文件放置在resources目录下.
2.4. Maven的生命周期
在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:
- validate,验证工程是否正确,所有需要的资源是否可用。
- compile,编译项目的源代码。
- test-compile,编译项目测试代码。
-
test,使用已编译的测试代码,测试已编译的源代码。
-
package,已发布的格式,如jar,将已编译的源代码打包。
-
integration-test,在集成测试可以运行的环境中处理和发布包。
- verify,运行任何检查,验证包是否有效且达到质量标准。
- install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
- deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
- generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
如果要执行项目编译,那么直接输入:mvn compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行mvn test时,会先运行mvn test-compile,然后才是mvn test。