(一)《Maven实战》读书笔记 —— Maven简介

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/flyingweb/p/8478044.html

第一章:Maven简介

一、何为Maven?

Maven这个词可以翻译为“知识的积累”,本书将介绍Maven这一跨平台的项目管理工具。作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。

(一)Maven是优秀的——项目构建工具

要理解何为Maven,首先得理解何为构建。构建是我们每一位程序员每天都在做的工作,除了编写代码,我们每天有相当一部分时间花在了清理、编译、测试、生成文档、打包和项目部署等繁琐的工作上,这就是构建(build)

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

Maven抽象了一个完整的构建生命周期模型,并且为绝大部分的构建任务提供了已实现的插件。只要遵循这个模型,就可以避免很多不必要的错误,可以直接使用大量成熟的Maven插件来完成我们的任务。此外,如果有非常特殊的需求,我们亦可以轻松实现自己的插件。

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

(二)Maven是出色的——项目依赖管理工具

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

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

(三)Maven还是——项目信息管理工具

Maven还能够帮助我们管理那些原本分散在项目中各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等。为我们节省了大量寻找信息的时间。

除了直接的项目信息,通过Maven自动生成的站点,以及已有的一些插件,我们可以轻松的获取项目文档、测试报告、静态分析报告、源码版本日志报告等非常具有价值的项目信息。

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

二、为什么需要Maven

Maven不是Java领域唯一的构建管理解决方案。本节将通过一些简单的例子解释Maven的必要性,并介绍其他的构建解决方案,如IDE、Make和Ant,并将它们与Maven进行比较。

(一)为什么不是自定义构建系统

使用脚本建立高度自定义的构建系统(重复发明轮子),耗时费力,结果也不一定很好。当然,你可以享受从无到有的乐趣,但恐怕实际项目中无法给你那么多的时间。使用Maven省时省力,并能够得到成熟的构建系统,还能得到来自于Maven社区的大量支持。Maven是开源的,你无须为此付费。如果你有兴趣,你还能去了解Maven是如何工作的。

(二)为什么不是IDE

使用简单的文本编辑器和命令行也能够完成绝大部分的开发工作,但很少有人愿意一直这样做。

虽然,我们无法否认优秀的IDE能够大大的提高开发效率。主流的IDE(如eclipse)都提供了强大的文本编辑、调试甚至重构功能。但是,IDE是有天生缺陷的(IDE不是万能的):

  • IDE依赖大量的手工操作。编译、测试、代码生成等工作都是相互独立的,很难一键完成所有工作。
  • 很难在项目中统一所有的IDE配置,每个人都有自己的喜好。也正是由于这个原因,一个在机器A的IDE上可以运行的任务,到了机器B的IDE中可能就会失败。

我们应该合理的利用IDE,而不是过多的依赖它。对于构建这样的任务,在IDE中一次次地点击鼠标是愚蠢的行为。Maven是这方面的专家,而且主流的IDE都集成了Maven,我们可以在IDE中方便地运行Maven执行构建。

(三)为什么不是Make

Make也许是最早的构建工具,它是由Stuart Feldman于1977年在Bell实验室创建。目前Make有很多衍生实现,包括最流行的GUN Make 和BSD Make,还有Windows平台的Microsoft nmake等。

Make由一个名为Makefile的脚本文件驱动,该文件使用Make自己定义的语法格式。Make通过一系列的目标(Target)和依赖(Prerequisite)将整个构建过程串联起来,同时利用本地命令(Command)完成每个目标的实际行为。Make的强大之处在于它利用所有系统的本地命令,尤其是UNIX/Linux系统,丰富的功能、强大的命令能够帮助Make快速高效地完成任务。

但是,Make将自己和操作系统绑定在一起。也就是说,使用Make很难实现跨平台的构建,这对于Java来说是非常的不友好的。此外,Makefile的语法也成问题,很多人抱怨Make构建失败的原因往往是一个很难发现的空格或者Tab使用错误。

(三)为什么不是Ant

Ant意指“另一个简洁的工具”(Another Neat Tool),它最早用来构建著名的Tomcat,其作者James Duncan Davidson创建它的动机就是因为受不了Makefile的语法格式。我们可以将Ant看成是一个Java版本的Make,也正因为使用了Java,Ant是跨平台的。此外,Ant使用XML定义构建脚本,相对于Makefile来说,这也更加友好。Ant有大量内置的用Java实现的任务,这保证了其跨平台的特质,同时,Ant也有特殊的任务exec来执行本地命令。

和Make一样,Ant也都是过程式的,开发者显式地指定每一个目标,以及完成该目标所需要执行的任务,针对每一个项目,开发者都需要重新编写这一过程这里其实隐含着很大的重复(重复发明轮子)。Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现,并且大部分插件都是现成的,开发者只需声明项目的基本元素,Maven就指定内置的、完整的构建过程,这在很大程度上消除了重复。

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

(四)不要重复发明轮子

不要重复发明轮子,Maven已经有一大把现成的插件,全世界都在用,你自己不用写任何代码!为什么没有人说“我自己写的代码最灵活,所以我不用Spring,我自己实现IoC;我不用Hibernate,我自己封装JDBC”?

【END】

原文地址:https://www.cnblogs.com/flyingweb/p/8478044.html

时间: 2024-12-13 17:27:45

(一)《Maven实战》读书笔记 —— Maven简介的相关文章

maven实战读书笔记(1)

Maven这个词的中文翻译是? 可以翻译为"知识的积累",也可以翻译为"专家"或"内行" Maven是啥?干什么的? 1.一个跨平台的项目管理工具 2.Apache组织的一个颇为成功的开源项目 3.Maven主要服务于基于Java平台的项目构建.依赖管理和项目信息管理 4.适合小型的开源类项目.大型的企业级应用 5.适合传统的瀑布式开发.流行的敏捷模式开发 跨平台是指?Maven是跨平台的 无论是Windows.Linux或者Mac上,都可以使用

Maven实战读书笔记(6)

Maven的坐标和依赖是?构件的逻辑表示方式和物理表示方式是? 1.坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式 2.文件是Maven构件的物理表示方式 3.Maven通过仓库来统一管理这些文件 那么,构件是什么东东? 1.任何一个依赖.插件或者项目构建的输出,都可以称为构件 2.依赖log4j-1.2.15.jar是一个构件 3.插件maven-compiler-plugin-2.0.2.jar是一个构件 4.account-email项目构建完成后输出account-email-

Maven实战读书笔记(18)

代码行统计插件的POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <m

Maven实战读书笔记(一):Maven概述

1.1 Maven是什么,能做什么 Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建.依赖管理和项目信息管理. Maven的用途之一是项目构建,能够自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署,只需要输入简单命令即可(如mvn clean install). Maven不仅是构建工具,还是依赖管理工具和项目信息管理工具,通过提供中央仓库,自动帮我们下载构件(artifact). Remark:Maven依赖于JDK,安装Maven之前需要先安装JDK.Mav

Maven实战读书笔记(12)- Nexus

Nexus 简介 安装Nexus Nexus的仓库与仓库组 Nexus的索引与构件搜索 配置Maven从Nexus下载构件 部署构件至Nexus Nexus的权限管理 Nexus的调度任务 其他私服软件 小结

Maven实战读书笔记(15)

关于灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建. 例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就需要能够识别所在的环境并使用正确的配置 还有一种常见的情况是,项目开发了大量的集成测试,这些测试运行起来非常耗时,不适合在每次构建项目的时候都运行,因此需要一种手段能让我们在特定的时候才激活这些集成测试,Maven为了支持构建的灵活性,内置了三大特性,即属性.Profile和资源过滤 Maven属性

Maven实战读书笔记(8)

何为Maven的生命周期? 1.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的.易扩展的生命周期 2.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤 3.Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,实际的任务(如编译源代码)都是交由插件来完成的 Maven的这种思想与设计模式的模板方法非常相似 模板方法模式在父类中定义算法的整体结构,子类可以通过实现或者重写父类的方法来控制实际的行为,这样

Maven实战读书笔记(3)

POM是什么? 1.像Make的Makefile.Ant的build.xml一样,Maven项目的核心是pom.xml 2.POM (Project Object Model, 项目对象模型) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等 如何编写一个Hello World的POM? 新建一个名为pom.xml的文件,输入内容如下: <?xml version="1.0" encoding="UTF-8"?> <project xm

Maven实战读书笔记(13)

WAR 1.基于Java的Web应用,其标准的打包方式是WAR 2.WAR与JAR类似,不过它包含更多的内容,如JSP文件.Servlet.Java类.web.xml配置文件.依赖JAR包.静态web资源(如HTML.CSS.JavaScript文件)等 一个典型的WAR文件的目录结构 - war / + META-INF / + WEB-INF / | + classes / | | + ServletA.class | | + config.properties | | + ... | |

Maven实战读书笔记(14)

什么是版本管理? 版本管理是指项目整体版本的演变过程管理,如从1.0-SNAPSHOT到1.0再到1.1-SNAPSHOT 什么是版本控制? 版本控制是指借助版本控制工具(如Subversion)追踪代码的每一个变更 什么时候可以将快照版本更新为发布版本 1.所有自动化测试应当全部通过 2.项目没有配置任何快照版本的依赖 3.项目没有配置任何快照版本的插件 4.项目所包含的代码已经全部提交到版本控制系统中 Maven的版本号定义约束 可能有个版本号是这样的,1.3.4-beta-2 Maven的