欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记录一下maven中多仓库的配置

程序员文章站 2022-05-02 10:38:36
...

背景说明

又是记性不好的记录类文章,没有任何技术含量,只是用于防止以后换电脑搭建环境时要用的。

本次主要记录在maven中如何让jar包在多仓库中查找,直到找到为止。

方法有多种,这里说三个比较常见的。

具体步骤

自建私有nexus仓库

在私有nexus仓库中,从多个第三方仓库中获取jar包,然后在自己的maven的settings.xml中配置mirror,将所有请求映射到这个私有仓库即可。具体做法和mirror配置网上很多。mirror配置举例如下(将所有下载映射到https://repo1.maven.org/maven2/):

<mirror>
      <id>maven repo1</id>
      <mirrorOf>*</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>https://repo1.maven.org/maven2/</url>
    </mirror>

这个地方,有一点要注意一下:多个mirror配置,如果mirrorOf相同,只会有一个有效,所以多个仓库使用并不是通过配置多个mirror来实现的,而是mirror到私有仓库,由私有仓库连接多个第三方仓库实现的。

在项目的pom中指定仓库

这个方法用的很多,也是比较建议的一种,因为灵活。但也要注意结合实际,因为有些公司在开发环境下的maven仓库和部署环境下的url等不一样,就不能使用这个方式。

具体做法是在pom文件的project节点下增加repositories配置,举例如下:

                  <repositories>
			<repository>
				<id>repo1</id>
				<name>Public Repository</name>
				<url>https://repo1.maven.org/maven2/</url>
				<layout>default</layout>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
			<repository>
				<id>repo</id>
				<name>mic-inner-repositories</name>
				<url>https://repo.maven.apache.org/maven2/</url>
				<layout>default</layout>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
			<repository>
				<id>central</id>
				<url>http://central.maven.org/maven2/</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
			<repository>
				<id>atlassian</id>
      			<url>https://maven.atlassian.com/repository/public/</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>

		</repositories>

 

在settings.xml做全局配置

这个做法很绝,因为是全局配置,所以不需要每个项目单独在pom中配置,适合很多情况(特别是上面说的开发环境和生产环境仓库不一致的问题),但需要开发人员配置自己的settings.xml。具体做法是:在maven的settings.xml文件的profiles节点下新增一个profile,举例如下:

  	<profile>
		<id>repositorys</id>

		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<repositories>
			<repository>
				<id>repo1</id>
				<name>Public Repository</name>
				<url>https://repo1.maven.org/maven2/</url>
				<layout>default</layout>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
			<repository>
				<id>repo</id>
				<name>mic-inner-repositories</name>
				<url>https://repo.maven.apache.org/maven2/</url>
				<layout>default</layout>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
			<repository>
				<id>central</id>
				<url>http://central.maven.org/maven2/</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
			<repository>
				<id>atlassian</id>
      			<url>https://maven.atlassian.com/repository/public/</url>
				<releases>
					<enabled>true</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>

		</repositories>
	</profile>

 注意一下,这个配置里面的大部分内容与第二个方案中相同,但要特别注意:<activeByDefault>true</activeByDefault>,这才是整个配置的灵魂!有了这个配置,就默认启动这个配置的,否则还需要在mvn命令中指定使用哪个profile的。