Maven实战01_Maven简介

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的集成,更是极大的方便了软件项目的开发,提升了开发效率。

时间: 2024-10-18 15:03:43

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

Maven实战 - 目录

<Maven实战>,许晓斌(Juven Xu),国内社区公认的Maven技术专家.Maven中文用户组创始人.Maven技术的先驱和积极推动者.2011.1初版. 基础性的构建工具,做Java的都会,会的程度参差不一,系统性的看一遍书,很快就能看完,可能有出乎意料的收获 第1章 Maven简介 1.1 何为 Maven 何为构建 Maven 是优秀的构建工具 Maven 不仅仅是构建工具 1.2 为什么需要Maven 组装 PC 和品牌 PC IDE 不是万能的 Make Ant 不重复发明轮

[Maven实战](6)仓库(本地仓库,远程仓库,镜像)

1. 简介 maven可以在某个位置统一存储所有maven项目共享的构件,这个统一的位置就是仓库.实际的Maven项目将不会各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(例如,编译项目的时候需要将依赖加入到classpath中),maven会自动根据坐标找到仓库中的构件,并使用它们.为了实现重用,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用. 2. 仓库分类 对于maven来说,仓库只分为两类:本地仓库和远程仓库.当maven根据坐标寻找构件的时候,它首先

[Maven实战](9)传递性依赖

了解Spring的朋友都知道,创建一个Spring Framework项目都需要依赖什么样的Jar包.如果不使用Maven,那么在项目中就需要手动下载相关的依赖.由于Spring Framework又会依赖与其他开源类库,因此实际中往往会下载Spring Framework的jar包,还的下载所有它依赖的其他jar包.这么做往往就引入了很多不必要的依赖.另一种做法是只下载Spring Framework的jar包,不包含其他的相关依赖,到实际使用的时候,再根据报错信息,或者查询相关文档,加入需要

Maven实战05_背景案例学Maven模块化

1:简单的账户注册服务 注册互联网账户是日常生活中再熟悉不过的一件事,作为一个用户,注册账户的时候需要进行以下操作,提供以下信息. 提供一个未被使用的帐号ID 提供一个未被使用的email地址. 提供一个任意的显示名称 设置安全密码,并重复输入以确认 输入验证码 前往邮箱查收激活链接并单击激活帐号 登录确认激活状态 帐号的ID和密码唯一的标识某个账户,显示名称用来在页面上显示,方便浏览.注册时需要用户输入两次密码,以确保没有输错.系统则负责检查ID和email的唯一性,验证两次输入的密码是否一致

Maven实战之初识MavenMaven的简单介绍

Maven实战之初识MavenMaven的简单介绍 作用:Maven主要用于项目的构建,管理项目的依赖以及项目的信息(自动化构建.编译.单元测试.生成文档.打包.部署) 优势:相对于Ant.Make等,Maven抽象构建过程,提供构建任务的实现,自动化构建,有效地提高了开发效率,使开发人员可以集中精力在主要的开发任务上.而且Maven是跨平台工具,意味着在主流操作系统中,Maven都提供了对应的技术支持 使用注意:需要在JDK1.4及以上版本使用 Maven的安装下载地址:Maven下载地址,选

Maven实战:Maven生命周期

前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解不够,很多时候使用Maven出了问题都无法很快地解决,因此打算深入地从搭建Maven工程开始学习一下Maven,这篇文章就将自己的学习历程记录下来和网友朋友们分享. 从搭建最简单的Maven项目开始 LZ使用的是MyEclipse,那么就是用MyEclipse搭建一个简单的Maven项目.第一步,n

Maven实战(四)——基于Maven的持续集成实践

Martin的<持续集成> 相信非常多读者和我一样.最早接触到持续集成的概念是来自Martin的著名文章<持续集成>.该文最早公布于2000年9月,之后在2006年进行了一次修订.它清晰地解释了持续集成的概念.并总结了10条实践,它们分别为: 仅仅维护一个源代码仓库 自己主动化构建 让构建自行測试 每人每天向主干提交代码 每次提交都应在持续集成机器上构建主干 保持高速的构建 在模拟生产环境中測试 让每一个人都能轻易获得最新的可运行文件 每一个人都能看到进度 自己主动化部署 原始文章

maven实战系列

Maven实战(一)安装和配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven实战(六)依赖   MyEclipse6.5 在线安装maven插件的地址: http://repository.sonatype.org/content/sites/forge-sites/m2e/0.10.0/S/20100209-0800/

Maven实战(一)搭建Nexus伺服器

在搭建伺服器之前我们先要说明一下为什么要搭建伺服器以及伺服器的作用是什么.在进行分布式开发中maven工具的使用能够极大的提高我们管理项目颗粒的效率,既然是管理颗粒那总得有地方存放才行,而伺服器扮演的就是这么一个角色,它相当于一个中型仓库,上联Maven的中央仓库,下联我们的本地仓库,当我们在本地编程的时候,如果需要引用jar包,maven首先会在本地仓库进行查找,如果在本地仓库找不到则会去伺服器上进行寻找,如果在伺服器上仍然找不到则会通过互联网从maven中央仓库进行下载.它的结构图如下: 大