Maven
Maven 是一个 项目管理和整合工具;
Maven 为开发者提供了一套完整的构建生命周期框架
Maven 使用了一个标准的目录结构和一个默认的构建生命周期
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。
因为大部分的工程配置操作都非常简单并且可以复用,在创建 *报告* 、*检查*、*构建*和*测试*自动配置时,Maven 可以让开发者的工作变得更简单。
Maven 可以完成的工作:
* 构建
* 文档生成
* 报告
* 依赖
* SCMs
* 发布
* 分发
* 邮件列表
Maven 的目标
Maven 的主要目的是为开发者提供:
- 一个可复用、可维护、更易理解的工程综合模型
- 与这个模型交互的插件或者工具
Maven 工程结构 和 内容被定义在一个 xml 文件中 - pom.xml,是 Project Object Model (POM)
的简称,此文件是整个 Maven 系统的基础组件。
约定优于配置
Maven 使用约定而不是配置,意味着开发者不需要再自己创建过程。
Maven 为工程提供了合理的默认行为。
当创建 Maven 工程时, Maven 会创建默认的工程结构。
下面的表格展示了工程源码文件、资源文件的默认配置,和其他一些配置。假定 ${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 |
为了构建工程,Maven 为开发者提供了现象来配置 生命周期目标 和 工程依赖 (依赖于 Maven 的插件扩展功能 和 默认的约定)。
大部分的工程管理 和 构建相关的任务是由 Maven 插件完成的。
POM
POM 代表工程对象模型。
POM 包含了 工程 和 各种配置细节的信息, Maven 使用这些信息构建工程。
POM 也包含了 目标 和 插件。 当执行一个任务或者目标时,Maven 会查找当前目录下的 POM , 从其中读取所需要的配置信息, 然后执行目标。
能够在 POM 中设置的一些配置如下:
* project dependencies
* plugins
* goals
* build profiles
* project version
* developers
* mailing list
在创建 POM 之前, 我们首先确定 工程组(groupId),及其 名称(artifactId)和版本,在仓库中这些属性 是 工程的唯一标识。
<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.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
需要说明的是每个工程应该只有一个POM文件。
- 所有的 POM 文件需要 project 元素 和 三个必须的字段 :
groupId
、aritfactId
、version
。 - 在仓库中的工程标识为 groupId:artifactId:version
- POM.xml 的根元素是 project,它有三个主要的子节点:
节点 | 描述 |
---|---|
groupId |
这是工程组的标识。 它在一个组织或者项目中是唯一的。 例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。 |
artifactId |
这是工程的标识。 它通常是工程的名称。 例如,消费者银行。 groupId 和 artifactId 一起定义了 artifact 在仓库中的位置 |
version |
这是工程的版本号。 在 artifact 的仓库中,它用来区分不同的版本。例如 :" com.company.ban:consumer-banking:1.0 " "com.company.ban:consumer-banking:1.1 " |
网友评论