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