Maven实战1.1何为Maven

Maven实战第1章Maven简介1.1何为Maven

Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。本书将介绍Maven这一跨平台的项目管理工具。作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。

1.1.1何为构建

不管你是否意识到,构建(build)是每一位程序员每天都在做的工作。早上来到公司,我们做的第一件事情就是从源码库签出最新的源码,然后进行单元测试,如果发现失败的测试,会找相关的同事一起调试,修复错误代码。接着回到自己的工作上来,编写自己的单元测试及产品代码,我们会感激IDE随时报出的编译错误提示。

忙到午饭时间,代码编写得差不多了,测试也通过了,开心地享用午餐,然后休息。下午先在昏昏沉沉中开了个例会,会议结束后喝杯咖啡继续工作。刚才在会上经理要求看测试报告,于是找了相关工具集成进IDE,生成了像模像样的测试覆盖率报告,接着发了一封电子邮件给经理,松了口气。谁料QA小组又发过来了几个bug,没办法,先本地重现再说,于是熟练地用IDE生成了一个WAR包,部署到Web容器下,启动容器。看到熟悉的界面了,遵循bug报告,一步步重现了bug……快下班的时候,bug修好了,提交代码,通知QA小组,在愉快中结束了一天的工作。

仔细总结一下,我们会发现,除了编写源代码,我们每天有相当一部分时间花在了编译、运行单元测试、生成文档、打包和部署等烦琐且不起眼的工作上,这就是构建。如果我们现在还手工这样做,那成本也太高了,于是有人用软件的方法让这一系列工作完全自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有烦琐的步骤都能够自动完成,很快就能得到最终结果。

1.1.2Maven是优秀的构建工具

前面介绍了Maven的用途之一是服务于构建,它是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。我们不需要也不应该一遍又一遍地输入命令,一次又一次地点击鼠标,我们要做的是使用Maven配置好项目,然后输入简单的命令(如mvn clean install),Maven会帮我们处理那些烦琐的任务。

Maven是跨平台的,这意味着无论是在Windows上,还是在Linux或者Mac上,都可以使用同样的命令。

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

想象一下,Maven抽象了一个完整的构建生命周期模型,这个模型吸取了大量其他的构建脚本和构建工具的优点,总结了大量项目的实际需求。如果遵循这个模型,可以避免很多不必要的错误,可以直接使用大量成熟的Maven插件来完成我们的任务(很多时候我们可能都不知道自己在使用Maven插件)。此外,如果有非常特殊的需求,我们也可以轻松实现自己的插件。

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

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

1.1.3Maven不仅仅是构建工具

Java不仅是一门编程语言,还是一个平台,通过JRuby和Jython,我们可以在Java平台上编写和运行Ruby和Python程序。我们也应该认识到,Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。

在这个开源的年代里,几乎任何Java应用都会借用一些第三方的开源类库,这些类库都可通过依赖的方式引入到项目中来。随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题都会接踵而来。手工解决这些问题是十分枯燥的,幸运的是Maven提供了一个优秀的解决方案,它通过一个坐标系统准确地定位每一个构件(artifact),也就是通过一组坐标Maven能够找到任何一个Java类库(如jar文件)。Maven给这个类库世界引入了经纬,让它们变得有秩序,于是我们可以借助它来有序地管理依赖,轻松地解决那些繁杂的依赖问题。

Maven还能帮助我们管理原本分散在项目中各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等。这些微小的变化看起来很琐碎,并不起眼,但却在不知不觉中为我们节省了大量寻找信息的时间。除了直接的项目信息,通过Maven自动生成的站点,以及一些已有的插件,我们还能够轻松获得项目文档、测试报告、静态分析报告、源码版本日志报告等非常具有价值的项目信息。

Maven还为全世界的Java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何的流行开源类库。通过一些Maven的衍生工具(如Nexus),我们还能对其进行快速地搜索。只要定位了坐标,Maven就能够帮我们自动下载,省去了手工劳动。

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

时间: 2025-01-21 15:17:52

Maven实战1.1何为Maven的相关文章

[Maven实战](3)Maven创建项目

前两篇文章我们已经大概了解并安装好了Maven.现在我们开始使用Maven创建项目,在此我们创建一个最简单的Hllo World项目.让我们对Maven有一个初步的认识,对于其中的诸多要点与疑点,以后文章中慢慢一起学习.所以这篇文章主要是让我们对Maven创建项目的流程有一个大概的了解. 1. Maven项目目录结构 2. 主代码 默认情况下项目主代码位于src/main/java目录下,遵循这个约定,创建该目录,然后在该目录下创建文件com/sjf/model/helloworld.java

Maven实战

Maven 实战 许晓斌  著 本书由国内社区公认的Maven专家Juven Xu亲自执笔,内容的权威性毋庸置疑. 本书是国内第一本公开出版的Maven专著.它内容新颖,基于最新发布的Maven 30,不仅详尽讲解了Maven 30的所有新功能和新特性,而且还将这些新功能和新特性与Maven 2x版本进行了对比,以便于正在使用Maven 2x版本的用户能更好地理解.本书内容全面,以从专家的角度阐释Maven的价值开篇,全面介绍了Maven的安装.配置和基本使用方法,以便于初学者参考:详细

Maven实战. 导读

Maven 实战 许晓斌  著 本书由国内社区公认的Maven专家Juven Xu亲自执笔,内容的权威性毋庸置疑. 本书是国内第一本公开出版的Maven专著.它内容新颖,基于最新发布的Maven 30,不仅详尽讲解了Maven 30的所有新功能和新特性,而且还将这些新功能和新特性与Maven 2x版本进行了对比,以便于正在使用Maven 2x版本的用户能更好地理解.本书内容全面,以从专家的角度阐释Maven的价值开篇,全面介绍了Maven的安装.配置和基本使用方法,以便于初学者参考:详细

[Maven实战](5)Archetype生成项目骨架

Hello World项目中有一些Maven的约定:在项目根目录中放置pom.xml,在src/main/java目录下放置项目的主代码,在sc/test/java中放置项目的测试代码.之所以一步一步的展示这些步骤,就是为了让我们这些菜鸟得到最真实的感受.我们称这些基本的目录结构和pom.xml文件内容为项目的骨架. 如下就是我们项目的目录结构骨架: 但是我们不希望每次创建项目时,都是手动一个一个的创建我们的目录结构,重复这些没有什么意义的事情.为此Maven提供了Archetype来帮助我们快

[Maven实战](4)eclipse创建Maven项目

介绍前面Hello World项目的时候,并没有涉及IDE,这样一个简单的项目,使用最简单的编辑器也能完成.但是对一个稍微大一些的项目来说,还是推荐使用IDE.这一篇文章我们在m2eclipse帮助下使用eclipse创建Maven项目. 1. 创建 使用IDE创建一个Maven项目非常简单,选择菜单项File->New->Other,在弹出的对话框中选择Maven下的Maven Project,然后点击Next按钮. 图1 在弹出的New Maven Project对话框中,使用默认的选项.

[Maven实战](2)Eclipse插件m2eclipse

1. 简介 Eclipse是一款非常优秀的IDE.除了基本的语法标亮,代码补齐,XML编辑等基本功能之外,最新版的Eclipse还能很好的支持重构,并且集成了JUnit,CVS等各种流行工具.可惜Eclipse默认没有集成Maven的支持.Sonatype公司建立了m2eclipse项目,这是一款十分强大的Maven插件. 2. m2eclipse安装 启动eclipse之后,在菜单栏中选择Help,然后选择Install New Software,接着就会有一个Install对话框.单击wor

《maven实战》学习笔记7——maven项目版本管理和灵活构建

说明 <maven实战>一书内容很多,整个maven要学的东西也很多,不过,结合个人实际情况,我打算把这一篇作为这次对maven学习的一个阶段性收尾,待其他更急需补充的知识有一定眉目了,再回过头来继续深入. maven版本管理 对于maven版本管理,最重要的是需要区分出快照版本SNAPSHOT和发布版本release,据目前的了解,快照版本格式是固定的,而发布版本有几种,例如带release单词的和不带release单词的. 快照版本由于每次发布都带时间戳,所以适用于开发阶段团队协作,但同时

《maven实战》学习笔记1——maven是什么?为什么要用maven?

前言 工欲善其事,必先利其器.对于java web开发者而言,或者说对于目前大部分java web开发者而言,eclipse.maven.svn.tomcat可能就是目前最常用也是必会的武器了,所以为了更高效的开发和解决问题,经过一番思考后我决定系统性的学学这几样武器. 这几样在我看来一样的重要,也就没有先后之分.都要学,于是我便随便抽了一个,就先从maven开始,主要是结合<maven实战>一书的电子版和纸质版来学习和实践. 为了更好的记忆,同时也为了能在学习的过程中帮到更多人,遂决定做这个

[Maven实战](1)安装与配置

1. Maven简介 Maven是一个跨平台的项目管理工具.作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理. 1.1 依赖管理 Maven提供了中央仓库,能帮助我们自动下载构件.在这个开源的年代里,几乎任何Java应用都会借用一些第三方的开源类库,这些开源类库都可通过依赖的方式引入到项目中来.随着依赖的增多,版本不一致,版本冲突,依赖臃肿等问题都会接踵而至.Maven提供了一个优秀的解决方案,它通过一个坐标系统准确的定位每一个构件(a