Maven
镜像
mirror
是为了解决依赖下载的速度问题,仓库
repository
是使用指定的仓库下载依赖。
maven
下载依赖的流程
maven
以编译工程下载依赖为例:
localRepository
本地仓库-》
nexus
私服(如果有)-》中央仓库
具体如下:
-
去maven
配置的settings
本地仓库查找依赖localRepository
- 本地仓库没有,根据
文件或者pom
配置的settings
仓库查找依赖repository
- 如果
配置了settings
,第二步的请求会被拦截,并使用mirror
配置的mirror
仓库查找依赖,即url
mirrorOf
的配置会影响拦截的请求,一般情况下配置的是自己公司的私服
3.1.
配置*,无论mirrorOf
和pom
配置的settings
仓库的repository
是什么,仓库url
都会被替换成url
中配置的mirror
3.2.url
配置业界公认可选值,此时mirrorOf
的mirror
url
也应该是其匹配的仓库地址
3.3.
自定义,一般情况下和mirrorOf
和pom
配置的settings
的repository
id
保持一致,这样镜像会拦截匹配的仓库的请求,不匹配的走中央仓库;如果都不匹配,遍历镜像并下载依赖;部分匹配,拦截匹配并下载,其他不匹配的遍历镜像并下载。
3.4.其他配置,例如一个镜像以逗号分隔,配置多个
mirrorOf
,所有拦截的请求使用同一个仓库
3.5.实际上
只是镜像mirrorOf
的一个别名,用来拦截仓库请求并转发到镜像配置的url
中url
- 如果镜像中拦截所有请求到私服,但私服中没有,私服会和中央仓库打交道拉取依赖
mirrorOf
配置原则
mirrorOf
- 自定义时,和
和pom
配置的settings
的repository
保持一致id
- 如果所有的请求都拦截到自己的私服,那么使用*
- 没什么原则,符合你的需求即可
配置案例
settings
的镜像,
id
和
name
自定义,
id
保证唯一,
mirrorOf
配置
*
拦截所有请求到私服
settings.xml
配置
<mirrors>
<mirror>
<id>nexus</id>
<name>nexus</name>
<mirrorOf>*</mirrorOf>
<url>http://192.168.1.11:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<!--激活配置 -->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://192.168.1.11:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://192.168.1.11:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>env-dev</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
在
settings
的
profile
配置仓库或者项目
pom
文件中配置仓库
pom.xml
中的配置
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://192.168.1.11:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://192.168.1.11:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>