maven实战读书笔记(1)

Maven这个词的中文翻译是?

可以翻译为"知识的积累",也可以翻译为"专家"或"内行"

Maven是啥?干什么的?

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

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

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

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

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

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

无论是Windows、Linux或者Mac上,都可以使用相同的命令,不必在意底层的细节

 

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

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

你的一天的工作可能是这样的

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

2、如果发现失败的测试,会找相关的同事一起调试,修复错误代码

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

4、忙到午饭时间,代码编写的差不多了,测试也通过了,开心地享用午餐,然后休息

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

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

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

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

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

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

2、如果,我们现在还手工这样做,那成本也太高了,于是有人用软件的方法让这一系列工作完全自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有繁琐的步骤都能自动完成,很快就能得到最终的结果

Maven的特点有哪些?

1、Maven自动化构建,Maven能够帮我们自动化构建,比如:清理、编译、测试到生成报告,再到打包和部署

2、Maven最大化消除构建重复

3、Maven抽象了构建生命周期模型,这个模型吸取了大量其他的构建脚本和构建工具的优点,总结了大量项目的实际需求。如果遵循这个模型,可以避免很多不必要的错误

4、Maven的插件,Maven为绝大部分的构建任务提供了已实现的插件,而且还有其他大量成熟的插件用于完成任务,也可以自己实现插件

5、Maven统一标准化构建过程

 

软件之消除重复

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

Java不仅是一门编程语言,还是一个平台

通过JRuby和Jython,我们可以在Java平台上编写和运行Ruby和Python程序

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

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

依赖管理是指?

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

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

3、Maven通过坐标系统准确定位每一个构建(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、主流的IDE有Eclipse和NetBeans等提供了强大的文本编辑、调试甚至重构的功能

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

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

4、主流IDE都继承了Maven,我们可以在IDE中方便地运行Maven执行构建

Make工具简介

Make也许是最早的构建工具,它由Stuart Feldman于1977年的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,也正因为使用了Java,Ant是跨平台的。此外,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来执行本地命令

Maven比Make、Ant的区别在于?

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

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

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

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

时间: 2024-08-28 17:19:11

maven实战读书笔记(1)的相关文章

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的

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

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

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实战读书笔记(7)

远程仓库的认证 1.一般来说,远程仓库无须认证就可以访问 2.但有时候出于安全考虑,需要提供认证信息,为了防止非法的仓库访问,管理员为每个仓库提供了一组用户名及密码 3.这时为了让Maven访问仓库内容,就需要配置认证信息 如何配置认证信息? 1.配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中 2.这是因为POM往往是被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机.因此,在settings.x