Maven - 概述

什么是Maven?

Maven是一个项目管理和理解工具,为开发人员提供完整的构建生命周期框架.由于Maven使用标准目录布局和默认构建生命周期,开发团队几乎可以立即自动化项目的构建基础架构.

如果有多个开发团队环境,Maven可以设置在很短的时间内按标准工作的方式.由于大多数项目设置都很简单且可重复使用,因此在创建报告,检查,构建和测试自动化设置时,Maven可以简化开发人员的生活.

Maven为开发人员提供了管理以下内容的方法.

  • 构建

  • 文档

  • 报告

  • 依赖关系

  • SCMs

  • 发布

  • 发布

  • 邮件列表

总而言之,Maven简化并标准化了项目构建过程.它无缝地处理编译,分发,文档,团队协作和其他任务. Maven提高了可重用性,并负责大部分与构建相关的任务.

Maven Evolution

Maven最初旨在简化Jakarta Turbine项目中的构建过程.有几个项目,每个项目包含略有不同的ANT构建文件. JAR被检入CVS.

Apache组随后开发了 Maven ,它可以一起构建多个项目,发布项目信息,部署项目,跨多个项目共享JAR并帮助团队合作.

目标

Maven的主要目标是为开发人员提供以下 :

  • 项目的综合模型,可重复使用,可维护且易于理解.

  • 与此声明性模型交互的插件或工具.

Maven项目结构和内容在xml文件中声明,pom. xml,称为项目对象模型(POM),它是整个Maven系统的基本单元.在后面的章节中,我们将详细解释POM.

约定优于配置

Maven使用约定而不是配置,这意味着开发人员不需要自己创建构建过程.

开发人员不必提及每个配置细节. Maven为项目提供合理的默认行为.创建Maven项目时,Maven会创建默认项目结构.开发人员只需要相应地放置文件,他/她不需要在pom.xml中定义任何配置.

作为示例,下表显示了项目源代码文件的默认值,资源文件和其他配置.假设, $ {basedir} 表示项目位置 :

Item默认
源代码$ {basedir}/src/main/java
资源$ {basedir}/src/main/resources
测试$ {basedir}/src/test
符合字节代码$ {basedir}/target
distributable JAR$ {basedir}/target/classes

为了构建项目,Maven为开发人员提供了提及生命周期目标和项目依赖性的选项(依赖于Maven插件功能及其默认约定).许多项目管理和构建相关的任务都由Maven插件维护.

开发人员可以构建任何给定的Maven项目,而无需了解各个插件的工作方式.我们将在后面的章节中详细讨论Maven插件.

Maven的功能

  • 遵循最佳实践的简单项目设置.

  • 所有项目的一致使用.

  • 依赖管理,包括自动更新.

  • 一个庞大且不断增长的库库.

  • 可扩展,能够轻松地用Java或脚本语言编写插件.

  • 即时访问新功能,只需很少或不需要额外配置.

  • 基于模型的构建 :  Maven能够将任意数量的项目构建到预定义的输出类型中,例如jar,war,元数据.

  • 项目信息的连贯站点 : 根据构建过程使用相同的元数据,maven能够生成包含完整文档的网站和PDF.

  • 发布管理和分发出版物 : 如果没有其他配置,maven将与您的源控制系统(如CVS)集成并管理项目的发布.

  • 向后兼容性  : 去;您可以从旧版本的Maven轻松地将项目的多个模块移植到Maven 3中.它也可以支持旧版本.

  • 自动父版本化 : 无需在子模块中指定父级进行维护.

  • 并行构建 : 它分析项目依赖关系图,使您能够并行构建计划模块.使用此功能,您可以实现20-50%的性能提升.

  • 更好的错误和完整性报告 :  Maven改进了错误报告,它为您提供了Maven wiki页面的链接,您可以在其中获得错误的完整描述.