仓库分类

仓库次要分类:

  • 本地仓库:本地磁盘, 不须要启动服务,默认门路~/.m2/repository
  • 近程仓库:启动了一个仓库服务过程,提供寄存、拉取jar包的能力
  • 镜像仓库:能够了解为缓存,跟指定的源仓库保持一致

其余概念:

  • 私服:就是一个近程仓库,只不过离咱们比拟近,个别在局域网内
  • 地方仓库:也是一个近程仓库,寰球共享,离咱们比拟远
  • 聚合仓:把两个仓库的资源合并在一个仓库里

事实中的产品:

nexus,既能够作为私服,同时也提供镜像的能力
别离创立一个host类型的和一个代理类型的仓库,
而后创立一个聚合仓,在拉取时从代理仓拉去,在deploy时deploy到host仓

应用上的问题

  • 如何正确配置mirrors?
  • 如何正确配置私服(近程仓)?

正确姿态

这部分次要分三点

  • 在pom中配置近程仓库
  • 在settings中配置近程仓库
  • 正确应用mirror
    前两点配置近程仓,也是配置私服

在pom中配置近程仓库

在pom.xml的repositories标签中能够配置多个近程仓库,maven如果发现本地仓库没有的依赖都会尝试从近程仓库拉取,按程序并发申请多个近程仓库

<project>    <repositories>    </repositories></project>

在settings中配置近程仓库

如果我的项目工程多了,每个我的项目都要在pom中配置近程仓库,繁琐、反复
在settings.xml的profiles标签中配置多个近程仓库,成果和在pom配置多个近程仓时一样的

<settings>  <profiles>    <profile>      <id>common</id>      <repositories>        <repository>          <id>alimaven</id>          <name>aliyun maven</name>          <url>https://maven.aliyun.com/repository/central</url>        </repository>      </repositories>    </profile>  </profiles>  <activeProfiles>    <activeProfile>common</activeProfile>  </activeProfiles></settings>

正确应用mirror

增加阿里的镜像,留神不要应用<mirrorOf>*</mirrorOf>

<settings>  <mirrors>    <mirror>      <id>nexus-aliyun</id>      <name>Nexus aliyun</name>      <mirrorOf>central</mirrorOf>      <url>https://maven.aliyun.com/repository/central</url>    </mirror>  </mirrors><settings>
对于mirrorOf的作用

当近程仓(不论你是在pom还是在settings中配置的)被镜像配置匹配上的时候,理论应用的将是镜像仓

对于应用<mirrorOf>*</mirrorOf>的坑

如果在mirrors中的第一个mirrorOf应用了*,并且没有应用其余排除表达式,将会导致前面的mirror生效,因为maven只会应用第一个匹配上的mirror

如何解决无奈下载依赖 (示例)

环境:

  • pom.xml没有配置任何近程仓
  • settings.xml只加了mirrorOf central 映射到 阿里镜像

假如我的项目须要用到依赖

        <dependency>            <groupId>cascading.avro</groupId>            <artifactId>avro-scheme</artifactId>            <version>2.1.2</version>        </dependency>

执行mvn clean package -DskipTests触发拉取依赖失败

在地方仓库搜寻该jar包
抉择版本后有提醒this artifact is located at Spring Plugins repository (https://repo.spring.io/plugins-release/)

阐明这个jar包没有公布到地方仓库,而是在一个叫Spring Plugins的仓库中

解决办法就是增加近程仓,在pom中或者settings中增加都能够