1:何为Maven

  Maven:中文翻译为“知识的积累”,也可翻译为“专家”或“内行”。

  谈到Maven,就不得不提“构建(build)”,那么什么是构建呢,我们每天在对代码进行编译、运行单元测试、生成文档、打包、部署等繁琐但是能够使代码得以最大的健壮和最小的bug的保证,这即使构建,其实说白了,就是让代码运行起来的过程。但是每天这样人工的操作,着实是有些浪费时间呀,Maven就是一款起那个大的构建工具,能够帮助我们自动化构建过程,从清理、编译、测试到生成报告、再到打包和部署。我们就可以省下一遍又一遍地输入命令,一遍又一遍地点击鼠标的时间。我们要做的就是使用Maven配置好项目,然后输入简单的命令(如:mvn clean install),Maven就会自动帮我们处理那些繁琐的任务。

  我们一直在不停地寻找避免重复的方法。设计的重复、编码的重复、文档的重复、当然还有构建的重复。Maven能够最大化地消除构建的重复,抽象了构建生命周期,并且为绝大部分的构建任务提供了已实现的插件,我们不需要定义过程,甚至不需要再去实现这些过程中的一些任务。最简单的例子就是测试了,我们没必要告诉Maven去测试,更不需要告诉Maven如何运行测试,只需要遵循Maven的约定编写好测试用例,当我们运行构建的时候,这些测试便会自动执行,这应该就是传说中的测试驱动开发吧(TDD:Test Driver Development)。

  Maven的另一个优点:标准化构建过程。在Maven之前,是个项目可能有十种构建方式,但是有了Maven之后,所有的项目的构建命令都是简单一致的。这极大地避免了不必要地学习成本,而且有利于促进项目团队的标准化。

  正如Java并不仅是一门编程语言,还是一个平台一样。Maven不仅是一个构建工具,还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。开源年代的出现,就意味着类库的增多,类库版本的高速增长,面对这些不同版本的依赖,靠手工的方式去解决依赖冲突,版本不一致的问题是非常痛苦和浪费了不必要的时间。而Maven提供了一个优秀的解决方案,它通过月hi个坐标系统准确地定位每一个构件(artifact),也就是通过一组坐标Maven能够找到任何一个Java类库(如Jar文件)。Maven给这个类库世界引入了经纬,让他们变得有序,于是我们可以借助它;来有序地管理依赖,轻松地解决那些繁杂的依赖问题。

  使用Maven还能享受一个额外的好处,即Maven对于项目目录结构、测试用例命名方式等内容都有既定的规则,只要遵循了这些成熟的规则,用户在项目间切换的时候就免去了额外的学习成本,可以说是约定优先于配置(Convention Over Configuration)

  综上所述,Maven作为一个构建工具,不仅能够帮我们自动化构建,还能抽象构建过程,提供构建任务实现,并且跨平台,对外提供一致的操作接口,这一切足以使它称为优秀的,流行的构建工具。

2:为什么需要Maven

Maven不是Java领域唯一的构建管理解决方案。例如IDE,Make,Ant同样是构建管理的解决方案。

使用Maven的好处

    • 省时省力,能够得到成熟的构建系统
    • 统一的坐标管理

IDE

    • IDE依赖大量的手工操作。编译、测试、代码生成等工作都是相互独立的,很难一键完成所有的工作,手工往往意味着低效,意味着容易出错。
    • 很难在项目中统一所有的IDE配置,每个人都有自己的喜好。也正是由于这个原因,一个在机器A上可以成功运行的任务,到了机器B上可能就会失败。

Make

最早的构建工具,由Stuart Feldman于1977年在Bell实验室创建

    • Make的强大之处在于它可以利用所有系统的本地命令,尤其是Unix /Linux系统,丰富的功能、强大的命令能够帮助Make快速高效地完成任务。
    • Make与操作系统的绑定是一大弊端,使用Make,就不能实现(至少很难)跨平台地构建,这对Java来说是不友好的。
    • Makefile的语法往往会因一个难以发现的空格或Tab使用错误导致构建失败

Ant

Ant不是蚂蚁,而是”另一个整洁的工具”(Another Neat Tool),最早用来构建Tomcat,作者James Duncan Davidson就是因为受不了Makefile的

语法格式而创建的。

Maven

拒绝重复的劳动,拒绝一样的轮子。

3:Maven与极限编程

极限编程(XP)是一种敏捷开发方法,强调拥抱变化。

Maven在极限编程中的应用

    • 简单

Maven暴露了一组一致、简洁的操作接口,能帮助团队成员从原来的高度自定义的、复杂的构建系统中解脱出来,使用Maven现有的成熟的、稳定的组件

也能简单构建系统的复杂度

    • 交流与反馈

与版本控制系统结合后,所有人都能执行最新的构建并快速得到反馈。此外,自动生成的项目报告也能帮助成员了解项目的状态,促进团队的交流。

    • 测试驱动开发(TDD)

TDD强调测试先行,所有产品都应该由测试用例覆盖。而测试是Maven声明周期的最重要的组成部分之一,并且Maven有现成的成熟插件支持业界流行的测

试框架,如Junit和TestNG

    • 十分钟构建

十分钟构建强调我们能够随时快速地从源码构建出最终的产品。这正是Maven所擅长的,只需要一些配置,之后用一条简单的命令就能让Maven帮你

清理、编译、测试、打包、部署、然后得到最终产品。

    • 持续集成(CI)

CI强调项目以很短的周期(如15分钟)集成最新的代码。实际上,CI的前提是源码管理系统和构建系统。目前业界流行的CI服务器如Hudson

和CruiseControl都能很好的和Maven进行集成。也就是说,使用Maven后,持续集成会变地更加方便。

    • 富有信息的工作区

这条实践强调开发者能够快速方便地了解到项目的最新状态。当然,Maven并不会帮你把测试覆盖率报告贴到墙上,也不会在你的工作台上放个东西告诉你

构建失败了,不过Maven发布的项目报告站点,并配置你需要的项目报告,如测试覆盖率报告,都能帮你把信息推送到开发者眼前。

4:被误解的Maven

任何事务都是存在两面性的,采用辩证的角度看就好了,你喜欢自然不会误解,你不喜欢,再误解我也无法改变,在这上面大家就各抒己见好了。

5:小结

Maven对于我来说是一种非常优秀的构建工具,它的出现,解决了之前困扰我很久的包版本不一致,版本冲突的问题,其坐标的定位方法,和提供相关依赖

的下载,为程序员更加的关注与业务,而不是这种能够避免的错误上。其和IDE的集成,更是极大的方便了软件项目的开发,提升了开发效率。

Maven实战01_Maven简介的更多相关文章

  1. Maven实战系列文章目录

    Maven实战(一)安装与配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...

  2. 【构建工具】《Maven实战》读书笔记

    Maven是我们在做Java开发过程中用经常用到的一个辅助工具.本篇博客是我学习Maven的一个记录博客,学习过程主要参考<Maven实战>这本书.同时也参考了Maven的官方文档. 1. ...

  3. Maven实战:Maven生命周期

    前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解 ...

  4. maven实战(01)_搭建开发环境

    一 下载maven 在maven官网上可下载maven:http://maven.apache.org/download.cgi 下载好后,解压.我的解压到了:D:\maven\apache-mave ...

  5. Maven实战(六)依赖

    我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependenci ...

  6. 学习笔记——Maven实战(四)基于Maven的持续集成实践

    Martin的<持续集成> 相信很多读者和我一样,最早接触到持续集成的概念是来自Martin的著名文章<持续集成>,该文最早发布于2000年9月,之后在2006年进行了一次修订 ...

  7. 学习笔记——Maven实战(六)Gradle,构建工具的未来?

    Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...

  8. 学习笔记——Maven实战(七)常用Maven插件介绍(上)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了 ...

  9. 学习笔记——Maven实战(八)常用Maven插件介绍(下)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

随机推荐

  1. exit与return的区别

    ===========================PHP的解释=========================================================== return ...

  2. mysql中geometry类型的简单使用

    mysql中geometry类型的简单使用 编写本文的目的: 让和两天前的我一样的初学者,能够更快的使用geometry类型存储空间点数据    也是为了自己加深印象,更熟练的使用geometry类型 ...

  3. 样本方差的抽样分布 χ2(n) 卡方分布_样本方差 卡方分布

    样本方差的抽样分布 χ2(n) 卡方分布_样本方差 卡方分布 样本方差的抽样分布 χ2(n) 卡方分布 t分布.卡方分布.f分布均要求总体服从正态分布. 若n个相互独立的随机变量ξ1,ξ2,-,ξn ...

  4. Collection、Iterator、泛型初步

    java.util.Collection 集合层次的根接口 java.util.List extends Collection ArrayList implements List 常用方法 boole ...

  5. 233 Matrix

    233 Matrix 有一\(n\times m\)的矩阵\(\{a\}\),定义\(a[0][0]=0,a[0][1]=233,a[0][2]=2333,a[0][3]=23333...\),然后给 ...

  6. SpringBoot配置自定义日期参数转换器

    1.自定义参数转换器 自定义参数转换器必须实现Converter接口 /** * Created by IntelliJ IDEA. * * @Auther: ShaoHsiung * @Date: ...

  7. C++函数模板&类模板

    函数模板 模板概念及语法 主要目的,简化代码,减少重复代码.基本语法格式:  template<class T> 或者 template<typename T> //末尾不加分 ...

  8. HTML和css简单日常总结

    今天主要学习了两个部分:第一部分html:在w3school学习了一些标签的使用和一些属性和方法,例如一些标签<a>,<h1><h6><from>< ...

  9. 洛谷 P1242 新汉诺塔

    原题链接 题目描述 设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号.将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A.B.C,这个状态称为初始状态. 现在要求找到一种步数最少的移动方案 ...

  10. 安装Tengine和Tengine说明

    什么是Tengine 官方帮助文档:http://tengine.taobao.org/nginx_docs/cn/   Tengine的安装   新建tengine用户组 groupadd -r n ...