Table of Contents
概述
Apache Maven是一个软件项目管理工具。 基于项目对象模型( project object model - POM)的概念,Maven可以从一个中心信息管理项目的构建,报告和文档。
Maven,是犹太语里面的一个词,意味知识的积累。最初是为了简化一个名为Jakarta Turbine项目中的构建过程而开始开发的。当时的项目中有几个项目都有自己的Ant构建文件,并且这些文件全部都略有不同,他们使用到的JAR包是在CVS里面检查。 我们想要的是使用一种标准化的方法来构建项目,这种方法能明确定义项目组成的内容,使得项目的发布简便,以及有办法能够跨多个项目共享JAR包的。
后来就诞生了maven工具,现在已经可用于构建和管理任何基于Java的项目。 maven使Java开发人员的日常工作更容易,并且通常有助于理解任何基于Java的项目。
Maven的主要目标是让开发人员在最短的时间内理解开发工作的完整状态。 为了实现这一目标,Maven试图处理以下几个方面的问题:
- 使构建过程变得简单:虽然使用Maven并不能消除对底层机制的了解,但Maven确实提供了很多对细节的屏蔽。
- 提供统一的构建系统:Maven允许项目使用其项目对象模型(POM)和一组由所有项目共享的插件来构建,从而提供统一的构建系统。 一旦熟悉了Maven项目的构建方式,就会自动了解所有Maven项目的构建方式,从而在尝试了解许多项目时节省大量时间。
- 提供优质的项目信息:
Maven提供了大量有用的项目信息,这些信息部分来自POM,部分来自项目的来源。 例如,Maven可以提供:
更改直接从源代码管理创建的日志文档 |
交叉引用的来源 |
邮件列表 |
依赖列表 |
单元测试报告包括报道 |
随着Maven的改进,所提供的信息集将得到改善,所有这些对Maven的用户都是透明的。 |
其他产品也可以提供Maven插件,所有这些仍然基于POM。
- 提供最佳实践开发指南:
Maven旨在收集最佳实践开发的现有原则,并使指导项目朝这个方向变得容易。
例如,单元测试的规范,执行和报告是使用Maven的正常构建周期的一部分。 目前的单元测试最佳实践被用作指南:
将测试源代码保存在单独但并行的源代码树中 使用测试用例命名约定来定位和执行测试 让测试用例设置他们的环境,而不是依赖于自定义构建以进行测试准备。 Maven还旨在协助项目工作流程,例如发布和问题管理。 Maven还建议了一些关于如何布局项目目录结构的指南,这样一旦你学习了怎样布局,你就可以轻松地驾驭任何其他使用Maven的项目。
- 允许透明迁移到新功能:
Maven为用户端提供了一种简单的方法来更新他们的安装,以便他们可以利用对Maven本身所做的任何更改。出于这个原因,从第三方或Maven本身安装新的或更新的插件已经变得微不足道了。
pom.xml
pom.xml包含此项目的项目对象模型(POM)。 POM是Maven的基本工作单元。 这一点很重要,因为Maven本质上是以项目为中心的,因为一切都围绕着项目的概念。 简而言之,POM包含有关项目的所有重要信息,并且基本上是一站式的,用于查找与项目相关的任何内容。 了解POM很重要,入门maven的工程师有必要了解POM简介。
下面是一个非常简单的POM,但仍然包含了每个POM包含的关键元素,所以我们可以通过每个POM元素来熟悉POM要点:】
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- project:这是所有Maven pom.xml文件中的顶级元素。
- modelVersion:此元素指示此POM使用的对象模型的版本。模型本身的版本很少发生变化,但如果Maven开发人员认为有必要更改模型,则必须确保使用的稳定性。
- gr