Maven 介绍(1)

Maven这个词的中文翻译是?java

能够翻译为"知识的积累",也能够翻译为"专家""内行"编程

 

Maven是啥?干什么的?服务器

1、一个跨平台的项目管理工具框架

2Apache组织的一个颇为成功的开源项目eclipse

3Maven主要服务于基于Java平台的项目构建、依赖管理项目信息管理编程语言

4、适合小型的开源类项目、大型的企业级应用工具

5、适合传统的瀑布式开发、流行的敏捷模式开发单元测试

 

跨平台是指?Maven是跨平台的测试

不管是WindowsLinux或者Mac上,均可以使用相同的命令,没必要在乎底层的细节ui

 

什么是传统的瀑布式开发?

 

什么是流行的敏捷模式开发?

 

你的一天的工做多是这样的

1、早上来到公司,从源码库签出最新的代码,而后进行单元测试

2、若是发现失败的测试,会找相关的同事一块儿调试,修复错误代码

3、接着回到本身的工做上来,编写本身的单元测试及产品代码,咱们会感激IDE随时报出的编译错误提示

4、忙到午餐时间,代码编写的差很少了,测试也经过了,开心地享用午饭,而后休息

5、下午先在昏昏沉沉中开了个例会,会议结束后喝杯咖啡继续工做

6、刚才在会上经理要求看测试报告,因而找了相关工具集成进IDE,生成了像模像样的测试覆盖率报告,接着发了一封电子邮件给经理,松了一口气

7、谁料QA小组又发过来了几个bug,没办法,先本地重现再说,因而熟练地用IDE生成了一个WAR包,部署到Web容器下,启动容器。

8、看到熟悉的界面了,遵循bug报告,一步步重现了bug,快下班的时候,bug修复好了,提交代码,通知QA小组,在愉快中结束了一天的工做

 

那么,什么是构建(项目构建)?用软件实现项目自动构建?

1、在上面的说明中,除了编写源代码,咱们天天有至关一部分时间花在了编译、运行单元测试、生成文档、打包和部署等繁琐且不起眼的工做上,这就是构建

2、若是,咱们如今还手工这样作,那成本也过高了,因而有人用软件的方法让这一系列工做彻底自动化,使得软件的构建能够像全自动流水线同样,只须要一条简单的命令,全部繁琐的步骤都能自动完成,很快就能获得最终的结果

 

Maven的特色有哪些?

1Maven自动化构建,Maven可以帮咱们自动化构建,好比:清理、编译、测试到生成报告,再到打包和部署

2Maven最大化消除构建重复

3Maven抽象了构建生命周期模型,这个模型吸收了大量其余的构建脚本和构建工具的优势,总结了大量项目的实际需求。若是遵循这个模型,能够避免不少没必要要的错误

4Maven的插件,Maven为绝大部分的构建任务提供了已实现的插件,并且还有其余大量成熟的插件用于完成任务,也能够本身实现插件

5Maven统一标准化构建过程

 

软件之消除重复

咱们一直在不停地寻找避免重复的方法,设计的重复、编码的重复、文档的重复,固然还有构建的重复

 

Java不只是一门编程语言,仍是一个平台

经过JRubyJython,咱们能够在Java平台上编写和运行RubyPython程序

 

Maven不只是构建工具,仍是一个依赖管理工具和项目信息管理工具

Maven提供中央仓库,能自动下载jar

 

依赖管理是指?

1、任何Java项目都会引入第三方开源类库

2、随着依赖的增多,版本不一致,版本冲突,依赖臃肿等问题,手工解决十分枯燥

3Maven经过坐标系统准肯定位每个构建(artifact),也就是经过一组坐标找到任何一个Java类库,Maven给类库世界引入了经纬度,让它们变得有序

4、这样有序的管理依赖,就轻松的解决了繁杂的依赖问题

 

项目信息管理是指?

1、项目信息主要包括,项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等

2、经过Maven自动生成的站点,以及一些已有的插件,咱们还可以轻松得到项目文档、测试报告、静态分析报告、源码版本日志报告等很是具备价值的项目信息

 

Maven的免费中央仓库是指?

给全世界的Java开发者提供的,在其中几乎能够找到任何的流行开源类库,只要定位Maven就能帮咱们自动下载,省去手动下载的麻烦

 

Maven的衍生工具(Nexus)

Nexus是本地私有服务器,能够上传一些中央服务器没有的开源类库,并能对其快速搜索

 

Maven还定义了项目目录结构、测试用例命名方式等既定规则

约定大于配置 (Convention Over Configuration),项目结构都同样开发起来更轻松

 

组装PC和品牌PC
1、使用脚本创建高度自定义的构建系统就像买组装PC,耗时费力,结果也不必定很好,但能够享受从无到有的乐趣,但恐怕实际项目中没法给你那么多时间

2、使用Maven就像购买品牌PC,省时省力,并能获得成熟的构建系统,还能获得来自Maven社区的大量支持

 

IDE的做用以及IDE的缺陷

1、主流的IDEEclipseNetBeans等提供了强大的文本编辑、调试甚至重构的功能

2IDE依赖大量的手工操做,编译、测试、代码生成等工做都是相互独立的很难一键完成全部的工做,手工劳动每每意味着低效、意味着容易出错

3、很难在项目中统一全部的IDE配置,每一个人都有本身的喜爱,一个在A机器上成功运行的任务,到B机器的IDE中可能就会失败

4、主流IDE都继承了Maven,咱们能够在IDE中方便地运行Maven执行构建

 

Make工具简介

Make也许是最先的构建工具,它由Stuart Feldman1977年的Bell实验室建立,Stuart Feldman也所以于2003年得到了ACM国际计算机组织颁发的软件系统奖。目前Make有不少衍生实现,包括最流行GNU Make BSD Make,还有Windows平台的Microsoft nmake

 

Make是什么?

Make由一个名为Makefile的脚本文件驱动,该文件使用Make本身定义的语法格式。其基本组成部分为一系列规则(Rules),而每一条规则又包括目标 (Target)、依赖 (Prerequisite) 和命令 (Command)Makefile的基本结构以下:

TARGET... : PREREQUISITE...

COMMAND

...

...

Make经过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每一个目标的实际行为。Make的强大之处在于它能够利用全部系统的本地命令,尤为是UNIX/Linux系统,丰富的功能、强大的命令可以帮助Make快速高效地完成任务

 

Make的缺陷是?

Make将本身和操做系统绑定在一块儿了,也就是说,使用Make,就不能实现 (至少很难跨平台的构建,这对于Java来讲是很是不友好的,此外Makefile的语法也成问题,不少人抱怨Make构建失败的缘由每每是一个难以发现的空格或Tab使用错误

 

Ant是什么?

Ant不是指蚂蚁,而是意指 "另外一个整洁的工具" (Another Neat Tool),它最先用来构建著名的Tomcat,其做者James Duncan Davidson创做它的动机就是由于受不了Makefile的语法格式。咱们能够将Ant当作是一个Java版本的Make,也正由于使用了JavaAnt是跨平台的。此外,Ant使用XML定义构建脚本,相对于Makefile来讲,这也更加友好

Make相似,Ant有一个构建脚本build.xml,以下所示:

<?xml version = "1.0"?>

<project name = "Hello" default = "compile">

       <target name = "compile" description = "compile the java source code to class files" >

              <mkdir dir = "classes" />

              <javac srcdir = "." destdir = "classes" />

       </target>

       <target name = "jar" depends = "compile" description = "create a Jar file">

              <jar destfile = "hello.jar">

                     <fileset dir = "classes" includes = " * * /* .class" />

                     <manifest>

                            <attribute name = "Main-Class" value = "HelloProgram" />

                     </manifest>

              </jar>

       </target>

</project>

build.xml的基本结构也是目标 (target)、依赖 (depends),以及实现目标的任务。好比在上面的脚本中,jar目标用来建立应用程序jar文件,该目标依赖于compile目标,后者执行的任务是建立一个名为classes的文件夹,编译当前目录的java文件至classes目录。compile目标完成后,jar目标再执行本身的任务。Ant有大量的内置的用Java实现的任务,这保证了其跨平台的特质,同时,Ant也有特殊的任务exec来执行本地命令

 

MavenMakeAnt的区别在于?

1、和Make同样,Ant也都是过程式的,开发者显式地指定每个目标,以及完成该目标所须要执行的任务。

2、针对每个项目,开发者都须要从新编写这一过程,这里其实隐含着很大的重复

3Maven是声明式的,项目构建过程和过程各个阶段所需的工做都由插件实现,而且大部分插件都是现成的,开发者只须要声明项目的基本元素,Maven就执行内置的、完整的构建过程,这在很大程度上消除了重复

4Ant是没有依赖管理的,因此很长一段时间Ant用户都不得不手工管理依赖,这是一个使人头疼的问题。幸运的是,Ant用户如今能够借助Ivy管理依赖,而对于Maven用户来讲,依赖管理是理所固然的,Maven不只内置了依赖管理,更有一个可能拥有全世界最多Java开源软件包的中央仓库,Maven用户无须进行任何配置就能够直接享用


什么是极限编程(XP)

极限编程 (XP) 是近些年在软件行业红得发紫的敏捷开发方法,它强调拥抱变化。该软件开发方法的创始人Kent Beck提出了XP所追求的价值、实施原则和推荐实践

 

Maven是如何适应XP的?Maven如何帮助XP团队实现一些核心价值的?

1、简单

2、交流与反馈

3、测试驱动开发

4、十分钟构建

5、持续集成

6、富有信息的工做区

 

为何简单?

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

 

什么是交流与反馈?

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

 

Maven如何支持测试驱动开发 (TDD)?

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

 

TextNG是什么?

 

十分钟构建是指?

十分钟构建强调咱们可以随时快速地从源码构建出最终的产品,这正是Maven所擅长的,只须要一些配置,以后用一条简单的命令就能让Maven帮你清理,编译、测试、打包、部署,而后获得最终的产品

 

持续集成 (CI)Maven

CI强调项目以很短的周期 (15分钟集成最新的代码。实际上,CI的前提是源码管理系统和构建系统。目前业界流行的CI服务器如Hudson CruiseControl都能很好地和Maven进行集成。也就是说,使用Maven后,持续集成会变得更加方便

 

富有信息的工做区是指?

这条实践强调开发者可以快速方便地了解到项目的最新状态。固然,Maven并不会帮你把测试覆盖率报告贴到墙上,也不会在你的工做台上放个鸭子告诉你构建失败。不过使用Maven发布的项目报告站点,并配置你须要的项目报告,如测试覆盖率报告,都能帮你把信息推送到开发者眼前

 

 

什么是持续集成CI

源码管理系统是什么?

CI服务器是什么?

HudsonCruiseControl都有什么特色?

 

Maven在传统的瀑布模式开发中的应用

在传统的瀑布模型开发中,项目依次要经历需求开发、分析、设计、编码、测试和集成发布阶段。从设计和编码阶段开始,就可使用Maven来创建项目的构建系统,在设计阶段,也万千能够针对设计开发测试用例,而后再编写代码来知足这些测试用例。然而,有了自动化构建系统,咱们能够节省不少手动的测试时间。此外,尽早地使用构建系统集成团队的代码,对项目也是百利而无一害,最后,Maven还能帮助咱们快速地发布项目

 

被骂怎么了?

C++之父 Bjarne Stroustrup 说过一句话: "只有两类计算机语言,一类语言每天被人骂,还有一类没人用。"固然这话也不全对,大红大紫的Ruby不只有人用,并且骂的人也少,用户最多的Java获得的骂声就不绝于耳了。Maven的用户也很多

 

Maven受到了哪些质疑?

1Maven对于IDE (EclipseIDEA) 的支持较差,bug多,并且不稳定

2Maven采用了一个糟糕的插件系统来执行构建,新的、破损的插件会让你的构建莫名其妙地失败

3Maven过于复杂,它就是构建系统的EJB 2

4Maven的仓库十分混乱,当没法从仓库中获得须要的类库时,我须要手工下载复制到本地仓库中

5、缺少文档是理解和使用Maven的一个主要障碍

 

质疑1
1、相对于JUnitAnt来讲,Maven比较年轻,IDE集成等衍生产品还不够前面和成熟

2、可是,使用Maven最高效的方式永远是命令行,IDE在自动化构建方面有天生的缺陷

3EclipseMaven插件m2eclipse是一个比较优秀和成熟的工具,NetBeans也在积极地为更好得集成Maven而努力,自IntelliJ IDEA开源后,也有望看到其对Maven更好的集成

 

质疑2

Maven2.0.9开始,全部核心的插件都设定了稳定版本,这意味着平常使用Maven时几乎不会受到不稳定插件影响。此外,Maven社区也提倡为你使用的任何插件设定稳定版本,若是咱们有好的实践不采纳,遇到了问题就抱怨,未免不够公允。从Maven 3开始,若是你使用插件时未设定版本,会看到警告信息

 

质疑3

不要期望Maven十分简单,这几乎是不可能的。Maven是用来管理项目的、清理、编译、测试、打包、发布,以及一些自定义的过程自己就是一件复杂的事情。目前在Java社区还有比Maven更强大、更简单的构建工具吗?答案是否认的,咱们能够尝试去帮助Maven让它变得更简单,而不是抛弃它,而后本身实现一套更加复杂的构建系统

 

质疑4

Maven的中央仓库确实不完美,你也许会发现某个jar包出如今两个不一样的路径下,这不是Maven的错,这是开源项目自己改变了自身的坐标,若是没有中央仓库,你将不得不去开源项目首页寻找下载连接,这不是更费事吗?如今有不少的Maven仓库搜索服务。没法从中央仓库找到你须要的类库?因为许可证等因素,这是彻底由可能,这时你须要作的时创建一个组织内部的仓库服务器,你会发现这会给你带来许多意想不到的好处

 

质疑5

这是事实,Maven官方站点的文档十分凌乱,各类插件的文档更是须要费力寻找。Sonatype编写的《Maven权威指南》和许总编写的《Maven实战》能够帮助你们理解和使用Maven

相关文章
相关标签/搜索