关于maven:maven仓库优先级

38次阅读

共计 1733 个字符,预计需要花费 5 分钟才能阅读完成。

仓库分类

仓库次要分类:

  • 本地仓库:本地磁盘, 不须要启动服务,默认门路~/.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 中增加都能够

正文完
 0