天天看点

maven的总结概述maven本地仓库、私服仓库和远程仓库依赖的范围和传递maven的集成和继承插件总结

概述

       maven是一个项目管理工具,可以帮助我们管理项目的构建,报告和文档。在学习maven的过程中,主要是学习其对项目构建的管理。

maven

       针对于比较小的软件开发,maven的作用不是很多,针对于项目比较,需要开发很多模块,每个模块又都是独立的情况下,maven的作用就会变得非常的明显。

       多个模块独立的开发,当合并的时候,就会出现各种各样的问题,最明显的问题就是对于依赖jar版本不同发生的冲突,maven可以很好的帮我们解决这个问题。

本地仓库、私服仓库和远程仓库

       仓库:存放jar包的地方;本地仓库:只能被本计算机使用的仓库;私服仓库:能被本局域网使用的仓库;远程仓库:可以被公网使用的仓库。

       默认情况下,在项目通过maven配置对jar的依赖后,maven会先看本地仓库中是否存在该jar,不存在的话就会去中央仓库看看是否存在(索引完成),存在,下载到本地仓库,不存在,则报错。这种情况一般情况不使用,因为,一个系统既然使用了maven,那么说明,有很多人开发多个独立的模块,此时,我们想一下,当我们软件添加的依赖非常多,并且又找了一个新人来工作的时候,这个新人会疯的,因为它光从中央仓库下载jar都需要好几天,所以,这种方式作为平常练手可以,但是,不具有实用性。

       通过私服解决上的问题,通过架设局域网内部的服务器,实现项目依赖jar在私服的目的,此时,项目依赖的流程为,项目通过maven配置对jar的依赖,然后,maven会先看本仓库中是否存在该jar,不存在的话,就去根据配置私服的工厂,向私服发送相应的请求,私服查看自己的仓库是否存在,存在,直接给就行了,不存在就需要去中央仓库查看是否存在该jar了。在配置私服的时候,我们需要注意一下,我们应该为maven配置上相应的镜像,放置出现越权请求的现象,确保项目都只能从私服上获取jar,不能直接从中央仓库获取jar,当然,我们也可以通过修改maven的central默认工厂来确保越权现象的不发生,但是,最好配置镜像。

       这里需要注意一下,中央仓库不是万能的,很多的jar在中央仓库中是找不到,所以,我们应该有一个心理准备,当有一些jar不能下载时,可能是该jar在中央仓库中不存在(不是我们配置的问题),此时,我们的做法是,从网上下载该jar,然后,将其发布到私服的相应工厂中。

依赖的范围和传递

       依赖的范围:该依赖(jar)的作用在构建的那个阶段(编译、打包等)

       依赖的传递:该依赖(jar)是否可以被传递

       对于上面的概念,不是很清楚,下面具体说一下依赖的范围和传递

       maven配置中对于依赖范围控制的是scope标签,其值的不同,代表了该依赖的范围

                compile(默认值):编译范围有效,在编译和打包时都会将依赖存储进去

                test:测试范围有效,在编译和打包时都不会使用这个依赖

                provided:编译和测试有效,生成war包不会加入

                runtime:运行有效,编译时不依赖

       依赖的传递,A包依赖于B包,B包依赖C包,这些依赖都是通过maven管理,当B包对于C包的依赖范围设置test时,那么,A包依赖B包时,C包就会自动的添加到A大依赖中,如果B报对于C包的依赖范围设置为compile时,A包就会自动依赖C包(自动添加其引用)

maven的集成和继承

       在开发系统的时候,我们通常是分模块开发,当然,模块的划分的依据也是多种多样的,有的是根据功能进行划分,有的根据专业领域划分等等,此时,我们以按功能进行划分,模块划分好后,我们具体开发某一个模块的时候,又将模块按照层次进行划分,即,开发一个模块需要创建多个项目,每个项目代码一个层,此时,我们再使用maven管理我们的项目时,就会出现相应的问题:操作上的重复,配置信息的重复,依赖版本控制的困难。

        maven的集成:把一个模块的多个项目通过配置,统一受一个项目pom的控制

        maven的继承,把一个模块的多个项目中重复的配置信息,全部放到同一个项目的pom中,然后,其它几个项目的pom继承该pom,注意,这里我们为了避免某个项目引入不必要的依赖,我们使用dependencyManagement标签进行管理,子pom需要显示(版本和范围不用写)的引入父pom的中依赖

插件

       插件是maven的核心,maven有3套独立的生命周期,这些生命周期的每个操作都是通过插件完成的,当然,这些是maven自带的插件,我们也可以为maven添加其他的插件,并绑定这些插件在其生命周期执行的时机。

       maven的插件有很多,具体的我们可以在maven的官网(Apache)进行相应查看(http://maven.apache.org/plugins/index.html),当我们有相应需求的时候,就去网上搜索

总结

       maven的具体操作,大家可以看一下网上的教程。从上面看,maven帮助我们解决了构建上重复的问题,从我们这一行业来看,其实,我们一直在不停的寻找避免重复(设计的重复、编码的重复、文档的重复、构建的重复等)的方法,所以,朋友,为告别重复加油!