Maven - 概述
Maven是什么?
Maven是一种项目管理和理解工具。Maven向开发者提供了一个完整的构建生命周期框架。开发团队几乎不用花时间就可以使用自动化构建项目的基础框架,因为 Maven 使用了一套标准的目录结构和默认的构建生命周期。
在存在多个开发团队的场景中,Maven可以在很短的时间内按标准建立起工作方式。因为大多数的项目配置简单并且可重用,Maven简化了开发者在创建报告,检查,构建和测试自动化配置中的工作。
Maven提供给开发者管理如下过程的方法:
- 项目构建(Builds)
- 文档(Documentation)
- 报告(Reporting)
- 项目依赖(Dependencies)
- 软件配置管理(SCMs)
- 发布(Releases)
- 分发(Distribution)
- 邮件列表(mailing list)
总的来说,Maven简化和统一了项目构建的过程。它无缝地处理项目编译,分发,文档,团队合作和其他任务,增加了任务处理的重用性,并可以处理大多数构建相关的任务。
Maven的历史
Maven最初是在Jakarta Turbine项目中设计出来,用作简化项目构建步骤。这个项目有若干子项目并且每个项目包含的ANT构建文件只有些许的差别。项目中JAR包那时是检入到CVS中。 然后Apache组织开发了Maven ,它可以把多个项目一起构建,发布多项目信息,完成多项目部署,在多项目间共享JAR包并且帮助团队间一起合作。
Maven的目标
Maven 主要的目标是提供给开发者
- 一种综合全面的模型,对项目来说可以重用,易于维护并且更容易理解
- 可以与这种声明式模型相互作用的插件或者工具
Maven项目结构和内容声明在一个xml文件中——pom.xml,称之为项目对象模型(POM)。它是整个Maven系统的基本单元。更多信息参考 Maven POM 章节。
约定优先于配置
Maven使用约定优先于配置,这意味着开发者不用自己创建构建流程。
开发者不需要指明每一个配置详情。Maven为项目提供了合理的默认行为。当创建一个Maven项目时,Maven会创建默认的项目结构。开发者只需要按照对应地放置文件,而不需要在pom.xml文件中做任何配置。
举个例子,假设${basedir}表示项目路径,下面的表格展示了项目源码文件目录、资源文件目录和其他配置的默认值:
Item | Default |
---|---|
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插件维护的。
开发者不需要理解个别的插件是如何工作的就可以构建任意指定的Maven项目。更多信息请参考Maven - 插件 章节。