Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,管理一个项目的建立,报告和文档。
如果你认为Maven给与你的项目与帮助,你可以在导航栏的“关于“段找到更多的信息。这里面深入的描述 Maven 是什么, 一些主要的特点, 和一些用户频繁问到的问题。
简介
Maven , Yiddish语为知识的累加器、专家。创建这个项目的目的源于在Jakata Turbin 项目中简化建造的过程。有几个项目,他们的Ant 建造文件略有不同,JARs检入到CVS中。我们想有一个标准的方式建造这些项目,一个清晰的定义就是项目是由什么组成,便易的方法是发布项目信息并且在几个项目之间共享JARs。
导致产生了一个用来建造和管理基于Java的项目的工具。我们希望这些事情能让Java开发者更容易工作,并且帮助对基于Java的项目的理解。
Maven 的目标
Maven的主要目的是帮助开发者在最短的时间内理解开发进展的完全状态。为了达到这个目标,Maven处理几个相关的领域的问题:
+ 使建造过程更容易
Maven 没有排除知道底层机制的需要的同时,对细节提供很多防护层。
+ 提供统一的建造系统
Maven允许使用他的项目对象模型(POM)和一个插件的集合来建造项目。一旦你熟悉一个Maven项目是如何建造的,你会自动明白所有的Maven项目是如何建造的,当驾驭很多个的项目时,能节约的大量的时间。
+ 提供高品质的项目信息
Maven提供大量有用的项目信息,一部分来自POM,一部分你来自项目的源码。例如,Maven可以提供:
++ Change 日志文档,直接从源码控制那里创建
++ 源码的交叉应用
++ 邮箱列表
++ 依赖列表
++ 单元测试报告(内含涉及范围)
Maven改良了信息的供给,所有这些对用户来说都是透明的。
其他产品可以提供Maven插件,来允许他们在Mave给出的标准的信息旁边放置自己的项目信息集。所有这些都是基于POM的。
+ 提供开发练习的指导方案
Maven为最好的开发练习收集理念,在这个方向上给项目提供指导。
例如,规范,执行和单元测试报告,这些都是使用Maven的正常建造周期的一部分。当前单元测试最好的练习指南:
++ 把你的单元测试源代码防止在独立,并且是平行的源码树中
++ 使用 test case 命名约定来定位和执行测试
++ 拥有单元测试的设置自己的环境,对于测试准备,不依赖自定义的建造。
Maven帮助项目流程,如发布管理和问题跟踪。
Maven提供对于项目目录结构布局的知道,一旦你学会布局,你可以很容易以同样的方式浏览其他的项目。
+ 允许透明合并新的 features
Maven为Maven客户端提供一个容易的方式来更新已安装的版本,以致达到充分利用升级后的好处。
从这点来讲,安装或者升级新的Maven自己或者第三方的插件是无关重要的。
Maven 不是什么
你可能听说过关于Maven的一些事情:
+ Maven是一个站点和一个文档工具
+ Maven扩展了Ant,让你下载依赖
+ Maven是一个可重用的Ant scriplets的集合
你从上面可以了解到Maven可以做这些事情。但这不是Maven具备的所有能力,他的目标是十分不同。
Maven鼓励更好的练习,但我们认识到由于历史的原因,一些项目已经不适合用于练习。在这些状况和出于不同项目的需要,没有对目标完善的妥协,它不能迎合每一种状况。
如果你决定用 Maven ,但拥有一个你不能整改的不平常的建造结构,你要么忘记这些特征或者完全使用Maven。
特色概要
+ 简单项目的setup – 在几秒钟内获得一个新项目或者模块
+ 所有的项目,一致的用法,表示新的开发者使用同样的时间就能进入一个项目
+ 超级的依赖管理,包含自动升级,依赖关口(传递依赖)
+ 在同一时间开展多个项目
+ 在盒子之外使用一个大型的、可增长的libraries和metadata的仓库,和大型的开源项目安置在一起,实时获得这些项目的最新发布版本
+ 可扩展性,容易使用Java或者脚本语言写插件
+ 不需要或者小小的配置就能实时访问新的features
+ 在Maven之外用Ant任务做依赖管理和发布
+ 基于模块的建造:Maven能够建造一定数量的预定义项目,输出类型如 JAR, WAR, 或者分发,基于该项目的metadata,对于大多数项目都不需要编写脚本。
+ 清晰的项目信息站点: 为建造过程使用同样的metadata,Maven能生成一个web站点或者PDF,包含你增加的文档,或者增加的标准报告,关于项目开发的状态。这些信息出现在左边导航的底下的“Project Information“和“Project Report” 子菜单。
+ 发行管理和分支发布:不需要额外的配置,Maven可以与你的源代码控制系统交互,如CVS,基于某个tag的项目发行。同样可以发布到某个分发的位置,给其他的项目使用。Maven能发布独立的输出,如JAR,一个包含其他依赖和文档的Archarce,或者一个源码分发。
+ 依赖管理: Maven鼓励使用JARs和其他依赖的中央仓库。Maven设定一个机制,就是你项目的客户端将会使用从中央仓库下载需要的JARs来建造你的项目,如Perl的CPAN。这让Maven的用户在项目之间重用JARs,鼓励项目之间的通信,确保向后兼容的问题的处理。中央仓库安置在ibiblio的服务器上。
