共计 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 中增加都能够