maven仓库

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无法访问被镜像仓库,因而无法下载构件!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值