Maven简介
Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来定义生命周期阶段(Phase)中插件(plugin)目标(gole)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目。
Maven与ant对比
Ant工具仅仅关注预处理,编译,打包,测试和分发,是一个构建工具。而Maven功能是Ant 的超集,属于项目生命周期管理工具不仅仅关注于构建阶段,Maven还包括生成报告,生成Web站点等等。
● Ant
Ant没有约定一个一般项目的目录结构,必须明确告诉ant到哪去找源代码等等信息。
Ant是程序化的,必要告诉它什么时候该做什么事情。
Ant没有生命周期,必须定义目标和目标之间的依赖,比如为每个目标配置任务。
● Maven
Maven拥有约定,你遵守了约定Maven就知道去哪寻找源代码等等。
Maven是声明式的,只需要创建一个pom.xml,maven就知道该做什么事情。
Maven拥有一个生命周期,当运行Maven install,这条语句告诉Maven执行一系列步骤,这些步骤也是约定好的,不需要手动指定执行顺序。
Ant和Maven的选择不是一成不变的,比如你现在的构建生命周期需要高度可自定义,则Maven的固定生命周期就不太适用。
Maven的核心理念——约定优于配置
系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置,配置虽然可以根据个人情况和喜好定制,但是却严重影响了项目人员之间的协作沟通。
Maven的约定:
源代码:src/main/java
资源文件:src/main/resource
测试代码:src/test
编译后的二进制文件:/target/classes
可分发的最终文件(.jar,.war,.ear):/target
(如果换成非约定优于配置的ant做以上的事情需要为每个都配置目录,如果有特殊需求需要配置路径的,maven也支持手动配置,但是默认为以上约定)
Maven成功的核心原因——项目配置统一接口
在以前,从版本服务器上检出两个项目,要想将它们打包成最终的可发布文件是非常困难的,因为你需要了解这两个项目是什么结构,分别需要发布什么东西,每个东西放在什么位置,现在新的程序员不需要了解这些,只需要执行maven install就能方便构建。
Maven仓库
Maven 为全世界的 Java 开发者提供一个免费的中央仓库,在其中几乎可以找到任何的流行开源类库;而且还支持私服(本地服务器)仓库,已达到更快获取类库的速度。通过一些 Maven 的衍生工具(如 Nexus ),我们还能对其进行快速地搜索。
Maven是基于插件的
Maven本身不做什么事情,几乎所有操作都是在插件上完成的,第一次执行命令会从中央服务器上下载命令执行插件来完成操作。