maven实战-----读书笔记之第六章~~第八章

第六章 Maven仓库

1.仓库的分类:仓库分为本地仓库,远程仓库,中央仓库,私服。java

本地仓库:本机上的maven仓库,setting配置本地仓库路径,以下图,下载下来的jar包都会存储在D:\java\repository中。算法

远程仓库:本地仓库比如书房,当想要读某本书的时候,会先在本地仓库里面找有没有,若是没有,则去书店购买,远程仓库就比如这书店,当我买到想读的书以后,就会保存在书房中,下回想在读该本书,就直接去书房找,本地仓库只有一个,但远程仓库能够配置多个。
中央仓库:maven会默认一个可用的远程仓库,不须要配置,maven会自动识别这个仓库,这个仓库就是中央仓库。spring

私服:私服是一种特殊的远程仓库,他是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的maven用户使用,当maven须要下载依赖jar包的时候,他会请求私服,若是私服不存在,他会再去外部的远程仓库下载,下载完毕存放到私服上,下次使用则请求的是私服,另外,咱们也能够将一些公共的服务做为依赖上传至私服,项目中多个团队人使用的时候,就不须要相互拷贝,直接下载就能够,他的好处是节省本身外网的宽带,加速maven构建,部署第三方插件(就是公共服务只对内开放,属于公司本身的业务jar依赖),提升稳定性,加强控制,下降中央仓库的负荷。设计模式

2.远程仓库的配置,当中央仓库没法知足项目的需求,可能项目须要的依赖在另一个远程仓库,入JBoss Maven仓库,这时,能够在POM中配置该仓库。maven

在repositories中,能够申明一个或者多个远程仓库,该例子中,申明了一个id为jboss,名称为JBoss Repository的仓库,任何一个仓库申明的id必须是惟一的,maven自带的中央仓库id使用的是central,若是其余仓库申明也使用了该id,则会覆盖中央仓库的配置,该配置中,releases和snapshots比较重要,他们用来控制maven对于发布版构件和快照版构件的下载,该例子中realeases的enable为true,表示支持JBoss仓库的发布版下载支持,snapshots为false,表示关闭JBoss仓库的快照版下载支持,根据该配置,maven则只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件。layout的值是default,表示仓库的布局是maven2及maven3的默认布局而不是maven1,对于releases和snapshots来讲,他还有另外两个子元素,updatePolicy和checksumPolicy,updatePolicy表明更新频率,默认的daily一天一次,never为从不检查更新,always为每次构建时都检查一次,interval:X  表示每隔X检查更新一次。元素checksumPolicy用来配置maven检查校验和文件的策略,当构件被部署到maven仓库中,会同时部署对应的校验和文件,当下载构件时,maven会验证校验和文件,当校验失败时,当checksumPolicy的值设置为warn,maven会在执行构件时输出警告信息,fail,maven遇到校验和错误时就让构建失败,ignore,使maven彻底忽略校验和错误。工具

3.远程仓库的认证布局

大部分远程仓库无需认证就能够访问,有时候出于彻底考虑,须要提供认证信息才能够访问一些远程仓库,好比私服。学习

4.部署至远程仓库测试

私服一大做用是部署第三方文件,包括组织内部生成的构件以及一些没法从外部仓库直接获取的构件,这些构件咱们须要部署到私服上,供其余团队成员使用,编辑项目中的pom.xml,配置以下,其中注意的是id应该与setting.xml中一个server元素中的id相同,且用户名,密码都须要正确匹配。ui

上传命令:mvn clean deploy,maven就会将项目构建输出的构件部署到配置对应的远程仓库,若是项目当前的版本是快照版本,则会部署到快照版本仓库地址,不然会部署到发布版本仓库地址,以下图是一个部署一个快照版本的输出:

5.快照版本

这样的配置就是一个快照版本,快照版本是不稳定的半成熟品,当开发稳定以后,将version改为1.0.0,则此时变成了发布版本。

6.镜像

若是镜像X能够提供仓库Y存储的全部内容,那么久能够认为X是Y的一个镜像,镜像常见的用法就是配合私服使用,因为私服能够代理任何外部的公共仓库,包括中央仓库,对于组织内部而言,使用一个私服地址就等于使用了全部须要的外部仓库,能够将配置集中到私服中,从而简化maven的配置,以下图所示,就是一个maven私服的配置。

 

 

第七章 Maven生命周期与插件

1.Maven的生命周期就是为了对全部的构建过程进行抽象和统一,maven从大量项目和构建工具中学习和反思,总结了一套高度完善的,易扩展的生命周期,这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎全部的构建步骤。

maven的生命周期是抽象的,意味着生命周期自己不作任何实际的工做,在maven的设计中,实际的任务(如编译源代码)都由插件来完成,这种思想和设计模式中的模板模式类似,模板方法在父类中定义算法的总体结构,子类能够经过实现重写父类的方法来控制实际的行为,保证了算法有足够的可扩展性,有能够严格控制算法的总体结构。,以下的模板方法能很好的体现maven生命周期的概念:

这段代码很是简单,build()方法定义了整个构建的过程,依次是初始化,编译,测似,打包(因为package与java关键字冲突,这里使用了单词packagee),集成测试,部署,可是这个类并无具体现实初始化,编译,打包,集成测试,部署,由子类去实现。

2.三套生命周期

初学者每每觉得Maven的生命周期是一个总体,Maven拥有三套相互独立的生命周期,他们分别是clean,default,site,clean生命周期的目的是清除项目,default生命周期的目的是构建项目,而site生命周期的目的是创建项目站点。

 

3.命令行与生命周期

4.插件目标

第八章 聚合和继承

1.聚合

其实就是父级目录,他的独特之处就是packaging为pom,不然没法建模,它的核心是<modules><module></module></modules>,称为聚合模块,聚合模块放在项目的最底层,其余模块做为聚合模块的子模块目录存在,

 2.继承

就是父模块声明的一些元素能够被子模块直接继承,子模块不须要在重复声明这些元素,如下是可继承的pom元素

 

3.依赖管理

上图能够看出dependencies也能够被子模块继承,若是子模块A和子模块B都用到了spring相关的jar包,那么,能够把spring相关的依赖都写在父模块,这个时候子模块A和子模块B就能够不用在配置sping的依赖,能够简化配置,可是存在的问题是,若是我新增一个子模块C,可是C不须要spring的依赖,那么因为继承的关系,模块也会自动引入spring的依赖,这样很差,maven为咱们提供了一个dependencyManager的元素,他的好处是方便咱们依赖版本管理,父模块定义一个spring版本为4.3.16,那么子类不须要再声明spring的版本了,方便总体的版本升级,还有一点,dependencyManager它只会声明这些依赖,他并不会正真引入这些jar包,子模块想用那个jar包,能够自行去引用,子模块中才会真正去下载依赖,运用很是灵活,以下图所示

                                                        父模块声明依赖

                  子模块引入依赖

4.插件管理

Maven提供了dependencyManager元素帮助管理依赖,相似的,Maven也提供了pluginManager元素帮助管理插件,该元素依赖不会形成实际的插件调用行为,

只有子模块真正去引用父模块中的插件时才会引入,以下图所示,子模块配置简化不少,若是子模块想引入不一样的版本和配置,则能够在子模块自行修改,则会直接覆盖父模块的版本,以及里面的配置。

5.聚合和继承的关系

聚合:父模块知道哪些子模块被聚合到一块儿了,子模块殊不知道这个聚合模块的存在。

继承:父模块不知道哪些子模块继承它,可是子模块必须知道父模块。

共同点:他们的packaging元素都是pom,他们出了pom.xml以外,通常都没有实际的内容

实际项目中,通常父模块都融合了聚合和继承,以下图所示:

6.反应堆

反应堆的构建顺序:它会先构建父模块,而后若是子模块A依赖子模块B,那么它会先构建B模块,而后在构建A模块,maven中不容许A依赖B,B又依赖A的状况,不然会报错。

裁剪反应堆:maven用户能够选择构建多个或者单个子模块,命令以下图:

 

相关文章
相关标签/搜索