文档章节

第一章 Maven简介

浣雨笑笑生
 浣雨笑笑生
发布于 2015/09/13 00:01
字数 2748
阅读 51
收藏 5

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

###1.1 何为Maven###  Maven的中文意思是“专家”、“内行”。作为Apache组织的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 #### 1.1.1 什么是构建####  软件开发过程中编写源代码之外的编译、运行单元测试、生成文档、打包和部署就是构建。如果手工完成这一系列的操作那成本太高了,于是有人用软件的方法让一系列的工作完全自动化,使得构建的工作可以像自动化流水线一样只需要一条简单的命令。 #### 1.1.2 Maven是一个优秀的构建工具####  Maven作为一个构建工具,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现;它跨平台,提供对外一致的操作接口,这一切足以使它成为优秀的流行的构建工具。 #### 1.1.3 Maven不仅仅是构建工具####  Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能够自动下载构建。

###1.2. 为什么需要Maven### #### 1.2.1 组装PC和品牌PC####  使用脚本构建高度自定义的构建系统就像组装PC,耗时费力结果也不一定好。使用Maven就像购买品牌PC,省时省力,并能得到成熟的构建系统,Maven还是开源的能够得到Maven社区的帮助。 #### 1.2.2 IDE不是万能的####  我们应该合理的使用IDE而不是过多的依赖它。使用IDE构建需要一次次的点击鼠标,手动操作意味着效率低和容易出错。Maven是这方面的专家,而且主流的IDE都集成了Maven,我们可以在IDE中使用Maven方便的执行构建。 #### 1.2.3 Make####  Make也许是最早的构建工具,它由Stuart Feldman于1977年在Bell实验室创建。目前Make有很多衍生版本,包括流行的GUN Make和BSD Make以及Windows平台的Microsoft nmake等。
 Make由一个名为Makefile的脚本文件驱动,该文件使用Make自定义的语言格式。其基本组成规则为一些列规格(rules),而每一条规格又包括目标、依赖和命令。
 Make通过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每个目标的实际行为。Make的强大之处在于它可以所有系统的本地命令。但是,Make将自己和操作系统绑定在一起了,也就是说Make就不能实现(至少很难)跨平台的构建,这对于Java来说是很不友好的。此外,Makefile的语法也成为问题,很多人抱怨Make构建失败的原因往往就是一个难以发现的空格或者Tab使用错误。 #### 1.2.4 Ant####  它最早用来构建著名的Tomcat,创建它的动机就是受不了Makefile的语法格式。可以将Ant看作是一个Java版本的Ant,正因为使用了Java,Ant是跨平台的。此外,Ant用XML定义构建脚本,更加友好。
 和Make一样Ant也是过程式的,开发者显示的制定一个目标以及完成此目标所需要执行的任务。针对每一个项目,开发者都需要重新编写这一过程,这里包含着很大的重复。Ant是没有依赖管理的,所以很长一段时间内Ant都不得不手工管理依赖。 #### 1.2.5 不重复发明轮子####  小张是一家小型民营软件公司的程序员,他所在的公司要开发一个新的Web项目。经过协商,决定使用Spring、iBatis和Tapstry。jar包去哪里找呢?公司里估计没有人能把Spring、iBatis和Tapstry所使用的jar包一个不少地找出来。大家的做法是,先到Spring的站点上去找一个spring.with.dependencies,然后去iBatis的网站上把所有列出来的jar包下载下来,对Tapstry、Apache commons等执行同样的操作。项目还没有开始,WEB.INF/lib下已经有近百个jar包了,带版本号的、不带版本号的、有用的、没用的、相冲突的,怎一个“乱”字了得!
 在项目开发过程中,小张不时地发现版本错误和版本冲突问题,他只能硬着头皮逐一解决。项目开发到一半,经理发现最终部署的应用的体积实在太大了,要求小张去掉一些没用的jar包,于是小张只能加班加点地一个个删……
 小张隐隐地觉得这些依赖需要一个框架或者系统来进行管理。
 小张喜欢学习流行的技术,前几年Ant十分流行,他学了,并成为了公司这方面的专家。小张知道,Ant打包,无非就是创建目录,复制文件,编译源代码,使用一堆任务,如copydir、fileset、classpath、ref、target,然后再jar、zip、war,打包就成功了。
 项目经理发话了:“兄弟们,新项目来了,小张,你来写Ant脚本!”
 “是,保证完成任务!”接着,小张继续创建一个新的XML文件。targetclean; target compile; target jar; …… 不知道他是否想过,在他写的这么多的Ant脚本中,有多少是重复劳动,有多少代码会在一个又一个项目中重现。既然都差不多,有些甚至完全相同,为什么每次都要重新编写?
 终于有一天,小张意识到了这个问题,想复用Ant脚本,于是在开会时他说:“以后就都用我这个规范的Ant脚本吧,新的项目只要遵循我定义的目录结构就可以了。”经理听后觉得很有道理:“嗯,确实是个进步。”
这时新来的研究生发言了:“经理,用Maven吧,这个在开源社区很流行,比Ant更方便。”小张一听很惊讶,Maven真比自己的“规范化Ant”强大?其实他不知道自己只是在重新发明轮子,Maven已经有一大把现成的插件,全世界都在用,你自己不用写任何代码!
 为什么没有人说“我自己写的代码最灵活,所以我不用Spring,我自己实现IoC;我不用Hibernate,我自己封装JDBC”? ###1.3. Maven与极限编程(XP)###  极限编程是敏捷开发的一种,极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
 极限编程(XP)是近些年在软件行业红得发紫的敏捷开发方法,它强调拥抱变化。该软件开发方法的创始人Kent Beck提出了XP所追求的价值、实施原则和推荐实践。下面看一下Maven是如何适应XP的。
 首先看一下Maven如何帮助XP团队实现一些核心价值:

  • 简单。
     Maven暴露了一组一致、简洁的操作接口,能帮助团队成员从原来的高度自定义的、复杂的构建系统中解脱出来,使用Maven现有的成熟的、稳定的组件也能简化构建系统的复杂度。
  • 交流与反馈。  与版本控制系统结合后,所有人都能执行最新的构建并快速得到反馈。此外,自动生成的项目报告也能帮助成员了解项目的状态,促进团队的交流。

 此外,Maven更能无缝地支持或者融入到一些主要的XP实践中:

  • 测试驱动开发(TDD)。
     TDD强调测试先行,所有产品都应该由测试用例覆盖。而测试是Maven生命周期的最重要的组成部分之一,并且Maven有现成的成熟插件支持业界流行的测试框架,如JUnit和TestNG。
  • 十分钟构建。
     十分钟构建强调我们能够随时快速地从源码构建出最终的产品。这正是Maven所擅长的,只需要一些配置,之后用一条简单的命令就能让Maven帮你清理、编译、测试、打包、部署,然后得到最终的产品。
  • 持续集成(CI)。
     CI强调项目以很短的周期(如15分钟)集成最新的代码。实际上,CI的前提是源码管理系统和构建系统。目前业界流行的CI服务器如Hudson和CruiseControl都能很好地和Maven进行集成。也就是说,使用Maven后,持续集成会变得更加方便。
  • 富有信息的工作区。
     这条实践强调开发者能够快速方便地了解到项目的最新状态。当然,Maven并不会帮你把测试覆盖率报告贴到墙上,也不会在你的工作台上放个鸭子告诉你构建失败了。不过使用Maven发布的项目报告站点,并配置你需要的项目报告,如测试覆盖率报告,都能帮你把信息推送到开发者眼前。
     上述这些实践并非只在XP中适用。事实上,除了其他敏捷开发方法如SCRUM之外,几乎任何软件开发方法都能借鉴这些实践。也就是说,Maven几乎能够很好地支持任何软件开发方法。
     例如,在传统的瀑布模型开发中,项目依次要经历需求开发、分析、设计、编码、测试和集成发布阶段。从设计和编码阶段开始,就可以使用Maven来建立项目的构建系统。在设计阶段,也完全可以针对设计开发测试用例,然后再编写代码来满足这些测试用例。然而,有了自动化构建系统,我们可以节省很多手动的测试时间。此外,尽早地使用构建系统集成团队的代码,对项目也是百利而无一害。最后,Maven还能帮助我们快速地发布项目。

© 著作权归作者所有

浣雨笑笑生
粉丝 7
博文 38
码字总数 52199
作品 0
徐汇
程序员
私信 提问
Web Component 实战 读书笔记

第一章 Web Component简介 模版元素 检测是否支持模版特性 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Web Component : template support</title></head><body><h1......

lilugirl
2016/03/23
126
0
恒宇少年/querydsl-chapter

#QueryDSL 简书相关系列文章源码 #一、环境配置 ###第一章:Maven环境下如何配置QueryDSL环境 #二、基础 ###第二章:整合QueryDSL与SpringDataJPA ###第三章:使用QueryDSL与SpringDataJPA完...

恒宇少年
2018/04/19
0
0
Tensorflow简介及主要依赖包Protocol Buffer&bazel

第一章简介 1,深度学习的三起三落 起初的感知机,线性叠加(不能解决线性不可分的问题) 之后的bp神经网络,反向传播受制于数据集,电脑硬件限制,被传统的机器学习(人工提取特征)所超越 ...

@ZeKing
04/14
0
0
《Zabbix企业级分布式监控系统》预售

《Zabbix企业级分布式监控系统》预售 一、预售网站链接如下 二、书籍封面如下 三、该书相关信息如下 本书的读者QQ群: Zabbix企业级分布式监控 271659981 (可申请加入,验证码:Zabbix监控)...

it你好
2014/08/13
0
0
Lucene In Action 读书笔记(一)

简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和...

林俊龙
2013/09/04
504
1

没有更多内容

加载失败,请刷新页面

加载更多

计算机电子书 2018 BiliDrive 备份

下载方式 根据你的操作系统下载不同的 BiliDrive 二进制。 执行: bilidrive download <link> 链接 <!--more--> 文档 链接 Webpack 中文指南.epub (409.01 KB) bdrive://ce58b7b58292296a61......

ApacheCN_飞龙
46分钟前
4
0
js转义字符串

js转义字符串 转义 字符串转义,简单粗暴的方法encodeURIComponent; encodeURIComponent 转义除了字母、数字、(、)、.、!、~、*、'、-和_之外的所有字符。 解码方法 decodeURIComponent(enc...

DrChenXX
49分钟前
4
0
在CentOS7搭建Redis哨兵服务

记一次搭建Redis哨兵服务(一主两从三哨兵) 1、下载Redis安装包http://www.redis.cn/download.html下载最新版,本次文档使用的是redis-5.0.6 2、准备三台虚拟机并且依次创建redis用户。设置...

jxgshxs
58分钟前
3
0
如何在单引号引起来的字符串中转义单引号

假设您有一个Bash alias例如: alias rxvt='urxvt' 效果很好。 然而: alias rxvt='urxvt -fg '#111111' -bg '#111111'' 将不起作用,也不会: alias rxvt='urxvt -fg \'#111111\' -bg \'......

技术盛宴
今天
5
0
网络时间服务和 chrony

网络时间服务和 chrony ntp 服务 chrony 服务 公共 NTP 服务 时间工具 ntp 服务 ntp 既可作客户端也可做服务器,需要时时开启与服务器同步,也需要时时等待客户端的连接,因此不同与c/s 结构...

hardstudy-win
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部