Maven镜像mirror和仓库repository的关系

Maven镜像mirror是为了解决依赖下载的速度问题,仓库repository是使用指定的仓库下载依赖。

maven下载依赖的流程

以编译工程下载依赖为例:localRepository本地仓库-》nexus私服(如果有)-》中央仓库
具体如下:

  1. mavensettings配置的localRepository本地仓库查找依赖
  2. 本地仓库没有,根据pom文件或者settings配置的repository仓库查找依赖
  3. 如果settings配置了mirror,第二步的请求会被拦截,并使用mirror配置的url仓库查找依赖,即mirrorOf的配置会影响拦截的请求,一般情况下配置的是自己公司的私服
    3.1.mirrorOf配置*,无论pomsettings配置的repository仓库的url是什么,仓库url都会被替换成mirror中配置的url
    3.2.mirrorOf配置业界公认可选值,此时mirrorurl也应该是其匹配的仓库地址
    3.3.mirrorOf自定义,一般情况下和pomsettings配置的repositoryid保持一致,这样镜像会拦截匹配的仓库的请求,不匹配的走中央仓库;如果都不匹配,遍历镜像并下载依赖;部分匹配,拦截匹配并下载,其他不匹配的遍历镜像并下载。
    3.4.其他配置,例如一个镜像以逗号分隔,配置多个mirrorOf,所有拦截的请求使用同一个仓库
    3.5.实际上mirrorOf只是镜像url的一个别名,用来拦截仓库请求并转发到镜像配置的url
  4. 如果镜像中拦截所有请求到私服,但私服中没有,私服会和中央仓库打交道拉取依赖

mirrorOf配置原则

  1. 自定义时,和pomsettings配置的repositoryid保持一致
  2. 如果所有的请求都拦截到自己的私服,那么使用*
  3. 没什么原则,符合你的需求即可

配置案例

settings的镜像,idname自定义,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>

settingsprofile配置仓库或者项目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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章