文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

关于Maven混合配置私有仓库和公共仓库的问题

2024-04-02 19:55

关注

背景

近期在调研一个开源仓库,于是将 代码 从github下载后,当IDEA sync依赖时出现Cannot resolve org.fourthline.cling:cling-support:2.1.1 的问题,详情如下:

Cannot resolve org.fourthline.cling:cling-support:2.1.1 
Clean up the broken artifacts data (.lastUpdated files) and reload the project.
Cannot resolve org.fourthline.cling:cling-core:2.1.1 
Clean up the broken artifacts data (.lastUpdated files) and reload the project.

很明显这个问题是Maven仓库找不到需要的jar包。那么如何解决这个问题呢?

私有和公共仓库混合配置

Maven仓库

首先,需要知道Maven仓库分为私有仓库、公有仓库、第三方仓库。其中:

熟悉仓库的分类对于解决上文中遇到的问题有这个重要的作用。

解决步骤

一、验证私有仓库

遇到依赖缺失的问题后,首先需要确认私有仓库是否存在依赖,查看nexus发现并没有需要的依赖,可以断定私有仓库没有此依赖。

二、搜索共有仓库

Maven官方的仓库提供了Web搜索页面,地址:repo1.maven.org/maven2/,尝试搜索后发现也没有需要的依赖。如下:

三、搜索第三方仓库

经过以上搜索后,可以断定 代码 需要的依赖,一定是由第三方仓库提供的。如何找到是在哪个第三方仓库呢?

此时,就需要mvnrepository来提供帮助了,地址: mvnrepository.com/ 。mvnrepository提供了公共仓库和第三方仓库中jar包的索引、查询、下载等实用功能。

我们尝试搜索需要的依赖, mvnrepository.com/artifact/or…,结果如下图:

可以看到在mvnrepository中找到了需要的依赖。那么问题来,如何知道第三方仓库的地址呢?可以详细看上图中箭头指向的区域,这里展示了第三方仓库的maven url。

在实践中,完全可以跳过搜索公共仓库,因为mvnrepository已经包含了公共仓库的依赖。

四、maven配置

maven仓库的配置是在setting.xml配置的。如果要混合配置私有仓库和公共仓库,需要在setting.xml增加新的mirrorprofile,并激活新的activeProfile

mirror

setting.xmlmirrors节点,是用来配置镜像URL的。mirrors可以配置多个mirror,每个mirrorid,name,url,mirrorOf属性,详细解释如下:

我们这次需要添加的mirror如下:

<mirror>
	<id>nexus-4thline</id>
	<mirrorOf>4thline</mirrorOf>
	<name>4thline nexus</name>
	<url>http://4thline.org/m2/</url>
</mirror>

这里又产生了一个问题,配置了多个mirror,Maven如何排序?答案是,Maven并不是按照setting.xml中配置的顺序执行,而是根据字母排序来指定第一个,然后会遍历所有的仓库,直至找到需要的依赖。

profile

作用:根据环境参数来调整构建配置的列表,settings.xml中的profile元素是pom.xmlprofile元素的裁剪版本

这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile

我们这次需要添加的profile如下:

<profile>
  <id>4thline</id>
  <repositories>
	<repository>
	  <id>4thline</id>
	  <url>http://4thline.org/m2/</url>
	  <releases>
		<enabled>true</enabled>
	  </releases> 
	  <snapshots>
		<enabled>true</enabled> 
		<updatePolicy>always</updatePolicy>
	  </snapshots>
	</repository>
  </repositories>
</profile>

activeProfile

作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile

该元素包含了一组activeProfile元素,每个activeProfile都含有一个profile id。任何在activeProfile中定义的profile id,不论环境设置如何,其对应的 profile都会被激活。如果没有匹配的profile,则什么都不会发生。

我们这次需要添加的activeProfile如下:

<activeProfiles>
	<activeProfile>corp</activeProfile>
	<activeProfile>aliyun</activeProfile>
	<activeProfile>4thline</activeProfile>
</activeProfiles>

配置结果

经过上述配置后,首先我们可以在IDEA的Maven侧边栏中,可以看到多了4thlineprofile。(可以看到IDEA的profiles是按照首字母排序的,和上文中mirror的定义是一致的。)

重新执行Reload All Maven Projects,所有的依赖都正常import。

setting.xml完整配置

完整版的setting.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
	<localRepository>D:\Users\xxx\.m2\repository\</localRepository>
	<pluginGroups>
	</pluginGroups>
	<mirrors>
		<mirror>
		  <id>nexus</id>
		  <mirrorOf>corp</mirrorOf>
		  <name>corp nexus</name>
		  <url>http://maven.corp.com/nexus/content/groups/public</url>
		</mirror>
		<mirror>
			<id>nexus-aliyun</id>
			<mirrorOf>*</mirrorOf>
			<name>aliyun nexus</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public</url>
		</mirror>
		<mirror>
			<id>nexus-4thline</id>
			<mirrorOf>4thline</mirrorOf>
			<name>4thline nexus</name>
			<url>http://4thline.org/m2/</url>
		</mirror>
	</mirrors>
	<servers>
		<server>
			<id>releases</id>
			<username>xxx</username>
			<password>yyy</password>
		</server>
		<server>
			<id>snapshots</id>
			<username>xxx</username>
			<password>yyy</password>
		</server>
	</servers>
	<profiles xmlns="">
		<profile>
			<id>corp</id>
			<repositories>
				<repository>
				  <id>public</id>
				  <name>all repoes</name>
				  <url>http://maven.corp.com/nexus/content/groups/public</url>
				  <releases>
					<enabled>true</enabled>
					<checksumPolicy>warn</checksumPolicy>
				  </releases>
				  <snapshots>
					 <enabled>true</enabled>
					 <updatePolicy>always</updatePolicy>
					 <checksumPolicy>fail</checksumPolicy>
				  </snapshots>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>corp</id>
					<url>http://maven.corp.com/nexus/content/groups/public</url>
					<releases>
						<enabled>true</enabled>
						<checksumPolicy>warn</checksumPolicy>
					</releases>
					<snapshots>
						<enabled>true</enabled>
						<updatePolicy>always</updatePolicy>
						<checksumPolicy>fail</checksumPolicy>
					</snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
		<profile>
		  <id>aliyun</id>
		  <repositories>
			<repository>
			  <id>aliyun</id>
			  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
			  <releases>
				<enabled>true</enabled>
			  </releases> 
			  <snapshots>
				<enabled>true</enabled> 
				<updatePolicy>always</updatePolicy>
			  </snapshots>
			</repository>
		  </repositories>
		</profile>
		<profile>
		  <id>4thline</id>
		  <repositories>
			<repository>
			  <id>4thline</id>
			  <url>http://4thline.org/m2/</url>
			  <releases>
				<enabled>true</enabled>
			  </releases> 
			  <snapshots>
				<enabled>true</enabled> 
				<updatePolicy>always</updatePolicy>
			  </snapshots>
			</repository>
		  </repositories>
		</profile>
	</profiles>
  	<activeProfiles>
		<activeProfile>corp</activeProfile>
		<activeProfile>aliyun</activeProfile>
		<activeProfile>4thline</activeProfile>
	</activeProfiles>
</settings>

结论

Maven是每一个Java程序员都再熟悉不过的工具,但是我们真的了解它吗?

任何一个优秀的框架、组件、工具,除了特殊的另外的特殊优化外,很多时候设计思路是大体相同的,我们在实际工作中不仅仅要扩展自己的涉猎领域,更需要在某些领域深入进入,对个人的提升是更为有益处的。

到此这篇关于Maven混合配置私有仓库和公共仓库的文章就介绍到这了,更多相关Maven配置私有仓库和公共仓库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯