nexus私服仓库maven-metadata.xml缺失导致的构建失败或者下载504

news2025/1/18 16:45:34

环境:maven项目,使用Nexus私服,jenkins实现代码的编译和打包。

问题分析思路:某周末前,jenkins上的编译打包任务一直正常工作,但周末后突然所有项目都编译失败,报错很一致都是Could not find artifact  ******;分析问题前后可能导致问题的变更,以便定位问题

1. 所有项目都出现问题,且gitlab上未发现代码,特别是pom.xml文件的提交记录,可以排除代码问题

2. 分析编译环境maven相关设置,鉴于问题前后都是用的同一个镜像,可以排除编译环境maven配置错误的可能

3. 目前确定的变化就是时间,猜测是否周末时间的变化触发了nexus私服触发了某些清除策略或机制,需要详细分析具体Could not find artifact的包

4. 分析编译过程download的记录日志,发现大量路径类似 Downloaded: http://192.168.10.100:8080/repository/public/,由此分析访问私服网络是没有问题的。

5. 查看日志详细分析未找到的依赖

Downloaded: http://192.168.10.100:8081/repository/public/io/reactivex/rxjava2/rxjava/2.2.19/rxjava-2.2.19.jar (2301 KB at 18115.6 KB/sec) Downloading: http://maven.aliyun.com/nexus/content/groups/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] gridnt-common ...................................... SUCCESS [ 2.207 s] [INFO] gridnt-dao ......................................... FAILURE [ 7.685 s] [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:36 min [INFO] Finished at: 2022-01-04T08:07:31+00:00 [INFO] Final Memory: 104M/440M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal on project gridnt-dao: Could not resolve dependencies for project com.gridnt:gridnt-dao:jar:3.1.0: The following artifacts could not be resolved: com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT:

Could not find artifact com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT in gridnt_repo (http://192.168.10.100:8081/repository/public) -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException [ERROR] After correcting the problems, you can resume the build with the command [ERROR] mvn -rf :gridnt-dao

  日志中的关键信息已使用红字标出,含义表达很清晰,在私服仓库中没有这个jar包project-mqtt-api-dev-9-SNAPSHOT.jar。

      根据日志中的提示信息,手动构造一下私服上project-mqtt-api-dev-9-SNAPSHOT.jar的访问路径:

Downloaded: http://192.168.10.100:8081/repository/public/io/reactivex/rxjava2/rxjava/2.2.19/rxjava-2.2.19.jar (2301 KB at 18115.6 KB/sec) Downloading: http://maven.aliyun.com/nexus/content/groups/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar

理论上应该是http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar

打开浏览器,登录nexus私服,访问上述url,结果返回404,表示该jar在私服上不存在

直接在私服上查找,结果可以查找到

 此处要注意:我想要下载的【project-mqtt-api-dev-9-SNAPSHOT.jar】,私服上的jar是带有有时间戳【dev-9-SNAPSHOT/project-mqtt-api-dev-9-20220104.093145-1.jar】熟悉maven私服snapshot机制的人到这里基本就找到问题根源了,可惜我对此不是很了解,所以饶了弯路。

6.【弯路,可跳过】以为上述jar包名字没有时间戳也是正确的,走上了错误排查路;因为不是所有私服上的jar都找不到,又先入为主觉得是受时间影响导致大jar包下载失败,所以就归纳分析所有下载失败的jar是否都是update比较早的包,但实际时间上并不存在共性,说明分析方向错误

7. 受同事启发,发现所有下载失败的包都是snapshots仓库的包,release仓库的包没有问题;检查pom.xml配置中私服地址对应仓库组中是否未配置snapshots,实际已配置;调整snapshots仓库顺序,优先查询snapshots仓库,结果问题仍存在。

8. 对比snapshots仓库和release仓库设置,发现snapshots有清除策略,但release没有,因此怀疑是清除策略导致的问题 

9. 网上漫搜的过程中突然有人提到使用清除策略后,会导致maven-metadata.xml丢失,然后依赖包下载失败,日志和我的问题类似

10. 返回查看日志,发现project-mqtt-api相关的下载有三个,依次为maven-metadata.xml、*.pom、jar包;对比之前打包成功的日志

-----编译时下载依赖包成功日志

Downloading: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/maven-metadata.xml

... Downloaded: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/maven-metadata.xml (2 KB at 36.9 KB/sec) Downloading: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.pom 2/2 KB Downloaded: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.pom (2 KB at 78.8 KB/sec) Downloading: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.jar 360/373 KB 67/67 KB 496/1661 KB 76/121 KB

..... Downloaded: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.jar (13 KB at 229.7 KB/sec)

----------编译时下载依赖包失败日志

Downloading: http://192.168.8.205:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/maven-metadata.xml ....... Downloading: http://192.168.8.205:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.pom ........ [WARNING] The POM for com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT is missing, no dependency information available Downloading: http://192.168.8.205:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar [ERROR] Failed to execute goal on project gridnt-dao: Could not resolve dependencies for project com.gridnt:gridnt-dao:jar:3.1.0: The following artifacts could not be resolved: com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT:

Could not find artifact com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT in gridnt_repo (http://192.168.8.205:8081/repository/public) -> [Help 1]

对比两个日志发现:

1)下载依赖包需要依次下载3个问题

2)下载失败从maven-metadata.xml下载失败开始产生的,而不只是缺少jar包,需要研究下maven-metadata.xml

3)成功下载和失败下载对比,.pom和.jar文件的文件名多了一串数字,看起来像时间戳;结合第5步和第6步分析,我们下载依赖jar包失败是因为路径错误,文件名写错了。

11. 研究发现maven-metadata.xml文件通过记录时间戳管理snapshots仓库的版本信息,之前jar和pom文件名称后缀部分的数字就取自maven-metadata.xml文件中的时间戳字段。

此时问题根本在为什么下载maven-metadata.xml失败。根据url访问返回404,该文件不存在。

在nexus下手动查看如下图,未找到maven-metadata.xml文件

   

  12.  解决方案

1)记录上图右下角的信息

com.gridnt project-mqtt-api dev-9-20220104.093145-1

 2)登录nexus,创建Rebuild Maven Metadata Files任务(点击上面的Add添加,此图中已完成创建)

  

 3) 新建任务后,Run执行任务,然后刷新snapshots仓库树结构页面,发现maven-metadata.xml文件有了,且记录的时间戳与目录下jar和pom文件名中的时间戳一致。再去执行编译任务下载依赖包成功了。

把所有编译时下载失败的jar(或者所有仓库都执行)都执行任务Rebuild Maven Metadata Files。问题解决了。

总结:遇到问题,最好的定位解决途径就是仔细分析报错日志!

遗留问题:为什么会过一个周末就出现maven-metadata.xml文件丢失的情况,没找到原因,有知道的小伙伴欢迎给

如果以上仍未解决问题,需要自己去看nexus的日志(sonatype-work/nexus/logs/nexus.log),如果有类似下面的日志,

需要去检查一下配置的proxy仓库远程地址是否可以正常访问(最好所有的都检查一下),如果不能正常访问需要修正地址或者禁用此proxy

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/556618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【牛客刷题专栏】0x30:JZ38 字符串的排列(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…

局域网与城域网 - ARP 地址解析协议

文章目录 1 概述2 ARP 地址解析协议2.1 工作过程2.2 报文格式2.3 ARP 命令 3 扩展3.1 网工软考真题 1 概述 #mermaid-svg-CQnNvTP8xFoJsztk {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CQnNvTP8xFoJsztk .error-…

plt、fig、axes、axis的含义

plt import matplotlib.pyplot as plt figure,axes与axis 如果将Matplotlib绘图和我们平常画画相类比,可以把Figure想象成一张纸(一般被称之为画布),Axes代表的则是纸中的一片区域(当然可以有多个区域,这…

剑指 Offer - 字符串合辑

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 题解目录 一、🌱[剑指 Offer 05. 替换空格](https://leetcode.cn/problems/t…

[笔记]C++并发编程实战 《二》线程管理

文章目录 前言第2章 线程管理2.1 线程管理的基础2.1.1 启动线程2.1.2 等待线程完成2.1.3 特殊情况下的等待2.1.4 后台运行线程2.2 向线程函数传递参数 前言 第2章 线程管理 本章主要内容 启动新线程等待线程与分离线程线程唯一标识符 好的!看来你已经决定使用多…

使用压缩包安装jdk多版本并能领过切换

使用压缩包安装jdk多版本并能领过切换 1.下载2.解压包到指定位置3.使用pdate-alternatives 进行版本切换管理3.1. jdk173.2. jdk1.8 3.切换版本4.解决JAVA_HOME环境变量识别的问题 1.下载 官网的下载地址: 下载地址: jdk17: jdk1.8在当前页面的下面: …

基于差分进化算法的微电网调度研究(Matlab代码实现)​

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MAC突然打不开Notion,你遇到过这个问题吗?

目录 解决办法 为什么Notion会突然打不开呢? Notion是一款适合记录/规划的应用,而且页面简洁,模板强大,深得大家喜爱。我也经常在Notion上制定计划、记录学习笔记等。不过,今天突然打不开了,网页版、本地…

基于SpringBoot的生鲜管理系统的设计与实现

背景 困扰交易市场的许多问题当中,生鲜交易管理一定是交易市场不敢忽视的一块。但是管理好生鲜交易又面临很多麻烦需要解决,例如有几个方面:第一,生鲜市场往往人数都比较多,如何保证能够管理到每一个商家,如何在工作琐碎,记录繁多的情况下将生鲜交易的当前情况反应给领导相关部…

【大数据】Hadoop高可用集群搭建

知识目录 一、写在前面💕二、Zookeeper安装✨三、Hadoop配置✨四、Hadoop HA自动模式✨五、HA脚本分享✨七、结语💕 一、写在前面💕 大家好!这篇文章是我在搭建Hdfs的HA(高可用)时写下的详细笔记与感想,希望能帮助到大…

分布式调度XXL-JOB

分布式调度XXL-JOB 1.概述 1.1什么是任务调度 比如: 某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算前一天的财务数据,统计汇总 以…

【图床】SpringBoot上传图片

知识目录 一、写在前面✨二、新建开源仓库✨2.1 新建仓库2.2 将仓库设置为开源2.3 生产私人令牌 三、代码实现😄3.1 工具类3.2 上传图片 四、总结撒花😊 一、写在前面✨ 大家好!我是初心,很高兴再次和大家见面。 今天跟大家分享…

【Unity】Animation Playable Bug、限制及解决方案汇总

【Unity】Animation Playable Bug、限制及解决方案汇总 先自荐一下我的PlayableGraph监控工具,比官方的Visualizer好用得多:https://github.com/SolarianZ/UnityPlayableGraphMonitorTool Bug 文中提及的各项Bug及解决方案的最小化测试工程可在此仓库下…

基于java的竞赛预约管理信息系统的设计与实现

背景 本系统提供给管理员对首页,个人中心,用户管理,项目分类管理,竞赛项目管理,赛事预约管理,系统管理等诸多功能进行管理。本系统对于用户输入的任何信息都进行了一定的验证,为管理员操作提高…

2023语言与智能技术竞赛开辟“双赛道”:寻找“全民测评官”,探索AI多模态能力...

开年以来,人工智能大语言模型(LLM)掀起新一轮全球科技竞赛,全球科技巨头打响“百模大战”。当大语言模型正深刻改变人类生产生活方式时,该如何进一步释放其潜能,成为业界关注的问题,也成为了202…

计网之HTTP请求的构造

文章目录 1. form表单请求构造2. ajax请求构造3. Postman的简单使用 常见的构造 HTTP 请求的方式有以下几种: 直接通过浏览器地址栏, 输入一个 URL 就可以构造出一个 GET 请求.直接点击收藏夹, 得到的也是 GET 请求.HTML 中的一些特殊标签也会触发 GET 请求, 如: link, script…

线程池ThreadPoolExecutor底层原理源码分析

线程池执行任务的具体流程是怎样的&#xff1f; ThreadPoolExecutor中提供了两种执行任务的方法&#xff1a; void execute(Runnable command)Future<?> submit(Runnable task) 实际上submit中最终还是调用的execute()方法&#xff0c;只不过会返回⼀个Future对象&am…

【项目实战】基于Vue3+TypeScript+Pinia的后台管理系统(coderwhy)

是基于Vue3、Pinia、VueRouter、Vite、ElementPlus、TypeScript、Echarts等后台系统 效果 项目地址 https://gitee.com/yangyang993/vue3_ts_cms_admin.git 超级管理员 登录 系统总览 侧边栏是动态形成的&#xff1a;动态路由加载。路由地址路径和菜单相匹配。 注意&…

CAN总线上的报文帧类型(N_PCI)

1.四种报文类型&#xff08;简洁明了&#xff09; 请记住对于CAN报文来说&#xff0c;可以通过识别每条CAN的首个字节来确定它的类型&#xff0c;4种&#xff1a; 单帧 0 首帧 1 连续帧 2 流控帧 3 2. 单帧&#xff08;SF&#xff0c;Single Frame&#xff09; 0X 单帧首个…

【Spring MVC】后端处理多文件上传如何保持最大的灵活性

文章目录 前言找文档Spring MVC 如何接收多文件formdata 接收其他传参结论 前言 有一个多文件上传的需求&#xff0c;翻看了Spring MVC的官网&#xff0c;总结一下&#xff1a; 如何根据版本号找官方文档后端如何声明Controller能保持较好的灵活性 找文档 spring-framework…