【Maven从入门到实战教程】第三章 Maven仓库和坐标
一、Maven仓库概述
Maven仓库分类:
本地仓库:本地主机上的仓库。
远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。
Maven的工作需要从仓库下载一些jar包,如下图所示,本地的Maven项目都会通过Maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存放到本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
下图描述了maven中仓库的类型:
二、中央仓库
由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令时下载到需要的构建。
中央仓库是Maven默认的远程仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。
中央仓库地址是:https://repo.maven.apache.org/maven2。
Maven的安装文件默认自带了中央仓库的配置,在MAVEN_HOME/lib/maven-model-builder.jar中可找到,org\apache\maven\model\pom-4.0.0.xml,其中配置有中央仓库地址。
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
三、私有仓库
一种特殊的远程仓库,它是架设在局域网内的仓库,主要是为了团队协作开发,可以理解为自己公司的仓库,也叫私服。
配置阿里云镜像,阿里云镜像其实就是阿里的私有仓库,只是公开给大家使用。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
使用私服的好处:
节省自己的外网带宽:建立私服可以减少组织自己的开支,大量的对于外部远程仓库的重复请求会消耗很大的带宽,利用私服代理外部仓库后,对外的重复构件下载得以消除,即降低外网带宽的压力。
加速Maven的构建:不停的请求外部仓库无疑是比较耗时的,但Maven的一些内部机制(如快照检测)要求Maven在执行构建的时候不停地检查远程仓库的数据。因此当配置了很多远程仓库时,构建的速度会被大大降低。使用私服可以很好地解决这个问题。
部署第三方构件:当某个构件无法从外部远程仓库下载怎么办?这样的例子很多,如组织内部的生成的私有的构件肯定无法从外部仓库获取,Oracle的JDBC驱动由于版权原因不能发布到外网的中心仓库。建立私服之后便可以将这些构件部署到本地私服中,供内部的Maven项目使用。
提高稳定性,增强控制:Maven构建搞定依赖于远程仓库,因此,当Internet不稳定的时候,Maven构建也会变的不稳定,甚至无法构建。
使用私服后即使暂时没有Internet连接Maven也可以正常运行,因为私服中缓存了大量的构件。此外一些私服软件(如:Nexus)还提供了很多额外的功能,如权限管理,RELEASE/SNAPSHOT区分等,管理员可以对仓库进行一些更高级的控制。
降低中央仓库的负荷:数百万的请求,存储数T的数据,需要相相当大的财力。使用私服可以避免很多对中央仓库的重复请求。
四、本地仓库
当Maven执行编译或测试时,如果需要使用到依赖文件,它总是基于坐标使用本地仓库的依赖文件。默认情况下,不管Linux还是Windows,每个用户在自己的用户目录下都有一个路径名为.m2/respository/的仓库目录。
从中央仓库或私有仓库中下载jar包和Maven信息或者自己打jar包的依赖仓库。
默认位置:~/.m2/repository
修改本地仓库位置:在MAVE_HOME/conf/settings.xml文件中配置本地仓库位置。
<localRepository>D:\maven\repository</localRepository>
五、Maven坐标
Maven仓库中拥有大量的依赖jar包,需要用来唯一标识来构建的统一规范。拥有统一规范,就可以从Maven仓库中准确的找到所需依赖。
<dependency>
<!-- Maven依赖的坐标GAV -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
还没有评论,来说两句吧...