Maven仓库分类
- 本地仓库
- 远程仓库
当Maven根据坐标寻找构件的时候,会先查看本地仓库,本地仓库存在则直接使用;本地仓库不存在,或者需要查看有更新的构件时,Maven就会去远程仓库查找 ,远程仓库有就下载到本地仓库再使用;远程仓库也没有需要的构件时,Maven就会报错!
对于Maven来说,本地仓库只有一个,但是可以配置多个远程仓库。
远程仓库的分类
-
中央仓库
Maven核心自带的远程仓库 -
私服
私服是搭建在局域网内来代理外部的远程仓库,内部的项目也能部署到私服上供其它项目调用 -
其它公共库
阿里云仓库
本地仓库
可以在Maven安装目录下的conf目录中编辑settings.xml文件来设置本地仓库的位置。
localRepository>D:/repository</localRepository>
一个构件只有在本地仓库内,才可以供Maven项目使用。那么构件如何进人本地仓库?最常见的是从远程仓库下载到本地仓库;还有一种是使用mvn clean install将我们的项目打包部署到本地仓库,本地有两个项目A和B,A依赖项目B,为了能构建A,就必须先执行命令将B打包到本地仓库;
中央仓库
最开始的本地仓库是空的没有任何构件,Maven必须至少知道一个可用的远程仓库,才能下载到需要啊的构件。所以Maven的安装目录自带了中央仓库的配置。在Maven安装目录下的lib目录下maven-model-builder-3.3.9.jar,解压查看org/apache/maven/model/pom-4.0.0.xml文件,这个配置文件是所有Maven项目都会继承的超级POM!
<repositories>
<repository>
<!--id:center是中央仓库的唯一标识-->
<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>
私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库来代理广域网上的远程仓库,供局域网内的Maven用户使用;
当存在私服时,Maven需要构件的时候,会先查看本地仓库,本地仓库存在则直接使用;本地仓库不存在,则从私服上下载;私服上不存在时,则从外部的远程仓库下载,缓存到私服上。一些无法从远程仓库下载的构件也可以从本地上传到私服上来使用;
使用私服的好处
- 节省外网带宽
大量对于外部仓库的重复请求会消耗很大的带宽,使用私服代理远程仓库,对外的重复构件下载可以消除,降低带宽的压力 - 部署第三方构件
当某个构件无法从外部仓库获取时,可以打包到私服上来使用
配置远程仓库
在项目的pom.xml文件下,在repositories标签下,可以使用repository标签添加一个会多个远程仓库,id必须唯一来标识仓库
<repositories>
<!--私服仓库-->
<repository>
<id>oasis-nexus</id>
<name>oasis-nexus</name>
<url>http://nexus.oasisapp.cn/repository/maven-snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<!--always每次构件的时候都会价差更新-->
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<!--阿里云仓库-->
<repository>
<id>ali</id>
<name>ali</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
部署构件到远程仓库
私服的一大作用是部署第三方构件,包括组织内部生成的构件,我们日常开发中的构件,可能别的项目需要依赖,我们需要部署到仓库中,供其它项目使用。
在项目的pom.xml文件下,在distributionManagement标签下配置部署的仓库
<distributionManagement>
<repository>
<id>oasis-nexus</id> <!--私服唯一标识-->
<name>oasis-nexus-releases</name>
<url>http://nexus.oasisapp.cn/repository/maven-releases/</url><!--私服地址-->
</repository>
<!--快照版本的仓库-->
<snapshotRepository>
<id>oasis-nexus</id>
<name>oasis-nexus-snapshots</name>
<url>http://nexus.oasisapp.cn/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
执行mvn clean deploy 命令可以将我们的项目部署到本地仓库以及配置的私服中。
配置认证信息
不管是向远程仓库部署构件还是从远程仓库下载构件,往往都需要认证信息。认证信息可以settings.xml中配置认证信息
servers>
<!--配置远程仓库的认证信息,id必须与distributionManagement中仓库的id相同,通过id将远程仓库与认证信息绑定-->
<server>
<id>oasis-nexus</id>
<username>admin</username>
<password>123qwe</password>
</server>
</servers>
配置镜像
镜像最常见的使用是结合私服,私服可以代理任何的外部远程仓库,因此,对于组织内部的员工,使用一个私服地址就等于使用了所有需要的外部远程仓库,这可以将配置集中到私服,简化Maven的配置。在这种情况下,任何需要的构件都可以从私服下载,私服就是所有仓库的镜像。
<mirror>
<mirror>
<id>oasis-nexus</id>
<!--mirrorOf的值为*,匹配所有的远程仓库-->
<mirrorOf>*</mirrorOf>
<name>all_mirror</name>
<url>http://nexus.oasisapp.cn/repository/maven-public/</url>
</mirror>
<mirror>
<id>oasis-nexus</id>
<mirrorOf>*</mirrorOf>
<name>all_mirror</name>
<url>http://nexus.oasisapp.cn/repository/maven-snapshots/</url>
</mirror>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf> mirrorOf的值为central,标识为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirror>
镜像仓库会完全屏蔽呗镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven无法访问被镜像仓库,因而无法下载构件!