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. 存储过程被程序和第三方客户端执行很慢,而sql server management studio执行速度正常

    来自:http://blog.csdn.net/pgbiao/article/details/22388945 原因分析:由于存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时 ...

  2. 从零学React Native之13 持久化存储

    数据持久化就是指应用程序将某些数据存储在手机存储空间中. 借助native存储 这种方式不言而喻,就是把内容传递给native层,通过原生API存储,详见从零学React Native之05混合开发 ...

  3. day 57 Django基础五之django模型层之关联管理器

    Django基础五之django模型层之关联管理器   class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况 ...

  4. oracle增加用户密码,cmd导入数据库

    1.tomcat中sql语句 用户名 pdmis 密码pdmis create USER pdmis IDENTIFIED BY pdmis;grant create session to pdmis ...

  5. java设计模式系列1-- 概述

    准备开始写些设计模式的随笔,这是第一篇,概述主要回顾下六大原则 先用轻松和谐的语言描述下这6个原则: 单一职责 每个类甚至每个方法都只要做自己分内的事,不要背别人的锅,也就是功能要分类,代码要解耦 里 ...

  6. pycharm新建ini文件或创建ini文件失败

    1.pycharm创建ini格式的文件,没有对应的 ini 文件类型-------需要更新 Ini 2.setting–>marketplace 搜索 Ini ,然后进行安装,重启pycharm ...

  7. shell脚本练习05

    ######################################################################### # File Name: -.sh # Author ...

  8. golang 获取当前可执行程序的当前路径

    import ( "errors" // "fmt" "os" "os/exec" "path/filepat ...

  9. 使用JS实现页面中动态添加文件上传输入项

    1. 编写JSP <%@ page language="java" import="java.util.*" pageEncoding="UTF ...

  10. Excel skill: 如何替换换行符,以及如何把一格转换成多行/多列

    http://blog.sciencenet.cn/blog-508298-695290.html 增加一辅助列,用替换函数替换掉软回车.比如A列是数据,从A1开始,则插入B列,B1输入公式=REPL ...