maven权威指南学习笔记(一)——简介

maven是什么?有什么用?

Maven是一个项目管理工具,它包含了

  •     一个项目对象模型 (Project Object Model),
  •     一组标准集合,
  •     一个项目生命周期(ProjectLifecycle),
  •     一个依赖管理系统(Dependency Management System),
  •     用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

约定优于配置(Convention Over Configuration)

约定优于配置是一个简单的概念。 系统,类库,框架应该假定合理的默认值,以简化使用时的配置,同时保留了用户修改默认配置权利。但是,在大部分情况下,你会发现使用 框架提供的默认值会让你的项目运行的更快或者更加方便。

在maven中,没有自定义的情况下,目录一般如下,

  •     源代码是在 /myApp/src/main/java,
  •     资源文件是在 /myApp/src/main/resources,
  •     测试代码是在 /myApp/src/test ;

项目会产生一个 JAR 文件。Maven会把

  •     编译好的字节码放到 /myApp/target/classes

并且

  •     创建的可分发JAR 文件放在 /myApp/target 。

基于maven插件的全局重用性

Maven 的核心其实不做什么实际的事情,除了解析一些 XML 文档,管理生命周期与插件之外,它什么也不知道。

Maven 被设计成将主要的职责委派给一组 Maven 插件,这些插件可以影响 Maven 生命周期,提供对目标的访问。绝大多数 Maven 的动作发生于Maven 插件的目标,如编译源码,打包二进制代码,发布站点和其它构建任务。你从Apache 下载的 Maven 不知道如何打包 WAR 文件,也不知道如何运行单元测试,Maven大部分的智能是由插件实现的,而插件从 Maven 仓库获得。

事实上,第一次你用全新的 Maven 安装运行诸如 mvn install 命令的时候,它会从中央 Maven 仓库下载大部分核心 Maven 插件。这不仅仅是一个最小化 Maven 分发包大小的技巧,这种方式更能让你升级插件以给你项目的构建提高能力。

Maven 从远程仓库获取依赖和插件的这一事实允许了构建逻辑的全局性重用。

这里举个例子,以单元测试为例,本来你工程的单元测试是基于junit3写的,本来的运行单元测试的插件版本(Maven Surefire)只能执行junit3,后来出了junit4,果断的你换成了支持注解的junit4,那么问题来了,原来版本的Maven Surefire不支持了,需要升级新版本,常规的做法是升级插件,各种麻烦,使用maven之后,只需要在POM中修改一下版本号,就是这么简单。

Maven 将一般的构建任务抽象成插件,同时这些 插件得到了很好的维护以及全局的共享,所以你不需要从头开始自定义你项目的构建系统然后提供支持。

maven与Ant的区别

对ant不了解,在《maven权威指南》中的少许内容,还不足让我完整了解ant,

从我自己的理解来看,他们最大的区别是,maven约定优于配置:maven约定了哪个目录是干嘛的,而ant都需要配置。

借鉴了下大神们的答案(作者sunboy,出处http://www.linuxidc.com/Linux/2013-05/84489.htm):

时间: 2024-12-25 01:26:17

maven权威指南学习笔记(一)——简介的相关文章

maven权威指南学习笔记(五)—— POM

Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里的信息. 这个POM文件在maven1中是project.xml,在maven2时改为pom.xml. <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.

maven权威指南学习笔记(三)&mdash;&mdash;一个简单的maven项目

目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project Object Model)有一个基本的理解 目前不准备深入学习maven故此使用工具ideaj 来帮助学习, 用idea创建一个默认的maven工程,结构如下: 相关命令: 打包:mvn package 编译:mvn compile 编译测试程序:mvn test-compile 清空:mvn cle

maven权威指南学习笔记

中文版源码:http://github.com/sonatype/maven-guide-zh/tree/ maven将大部分工作交给插件,插件由maven获得. mvn install Maven 从远程仓库获取依赖和插件的这一事实允许了构建逻辑的全局性重用. Maven Surefire 插件是负责运行单元测试的插件, 升级除了 POM 中一个插件的版本号,你不需要更改你项目的任何东西. Maven 将一般的构建任务抽象成插件,同时这些 插件得到了很好的维护以及全局的共享,你不需要从头开始自

Git权威指南学习笔记(一)Git初始化

1.在Git中配置用户名和邮件地址 $ git config --global user.name "Jymn_Chen" $ git config --global user.email "[email protected]" 注意把用户名和邮件地址替换成你自己的资料. 在这里的参数global表示配置的作用范围是当前用户,如果将参数改为system,那么配置的作用范围是系统中的所有用户. 2.创建版本库 新建一个目录并cd到目录中,执行以下命令: $ git i

Git权威指南学习笔记(二)Git暂存区

如下图所示: 左侧为工作区,是我们的工作目录. 右侧为版本库,其中: index标记的是暂存区(stage),所处目录为.git/index,记录了文件的状态和变更信息. master标记的是master分支所代表的目录树.HEAD指向master分支. objects标记的是Git的对象库,所处目录为.git/objects,文件索引建立了文件和对象库中对象实体之间的映射关系. 通过该图我们可以清晰地看出add,commit等命令的转化关系.下面通过git diff和git status两条命

JavaScript权威指南学习笔记之一

1.关于分号 javascript里面不强制使用分号来表示一行语句的结束,但是最好能够在写js之前,特别是在原有的js上面新增时,最好前置一个分号.避免这种情况发生:  2.JavaScript类型转换 3.关于=== ①如果类型不同则不等 ②null===null或undefined===undefined ③true===true或false===false ④NaN不等 ⑤0===0 0===-0 ⑥如果是同一个object,array,function则相等 4.关于== ①如果已经==

MongoDB权威指南学习笔记4---查询相关的知识点

1 find find({查询条件},{"key":1,"email":1})  后面表示返回哪些键 2 可用的比较操作符 $lt , $lte,$gt,$gte 比如db.users.find({"age":{"$gte":18,"$lte":30}}) 3不等于 find(...{"key":{"$ne":"value"}} 4 in find

MongoDB权威指南学习笔记5---索引相关的知识点

1 查看查询计划 db.user.find({"username":"xxx"}) .explain() db.doc.find({"es_y":"2014"}).explain() {  "cursor" : "BasicCursor",  "isMultiKey" : false,  "n" : 0,  "nscannedObject

Hadoop权威指南学习笔记一

Hadoop权威指南学习笔记一 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习参考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm 1. 数据的增长远远超过了磁盘的读取速度,传统的数据存储方式和分析方式变得不再适用于大数据的处理. Hadoop分为两大核心技术,HDFS(HadoopDistributed File System-分布式hadoop文件处理系统)和MapReduce(分为Map-数据映射等