Maven依赖传递失效问题解决

Maven依赖传递失效问题解决

  • 背景介绍
  • 问题描述
  • 解决方式

记一次非常规问题解决: maven依赖传递关联(传递)失效

背景介绍

首先maven工程结构大致是这样 (注意maven仓库 是本地仓库-公司中央仓库-远程仓库, 可能对理解遇到的问题原因和为何那样解决有些帮助):

	<groupId>com.xx.bigdata</groupId><artifactId>service-manager</artifactId><version>1.0</version><packaging>pom</packaging><modules><module>service-base</module><module>service-a</module><module>service-b</module></modules>

我们在父工程service-manager下面有一个公共包service-base,然后有两个子服务service-aservice-b
其中service-a和service-b是具体的业务服务; 两个服务有不少公共逻辑(比如邮件, 基础工具包等)是在service-base,正常情况下, 当我们在service-base中引入依赖, 利用<scope> 标签就可以将service-a和service同时需要的依赖jar包统一放到service-base下管理,从而避免到处重复依赖的问题(以上文字描述如果觉得抽象,可以看下面的例子)


用一个比较实用的场景案例,比如service-base和两个子服务都需要的lombok包
最终配置是这样的:

service-manager(父工程pom)

<properties><lombok.version>1.16.18</lombok.version><service.base.version>1.0.1</service.base.version>
</properties>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version>
</dependency>

service-base(基础工具包)

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

service-a(子服务a,依赖了service-base后,由于service-base中依赖了lombok包,并且scope为compile[默认], 这里即可不再显式依赖lombok包)

<!--所有子服务工程均需要的基础依赖包-->
<dependency><groupId>com.xx.bigdata</groupId><artifactId>service-base</artifactId><version>${service.base.version}</version></dependency>
<!--service-base中已有依赖, 这里即可不再显式依赖lombok包-->
<!--<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>-->

service-b(子服务b,依赖了service-base后,由于service-base中依赖了lombok包,并且scope为compile[默认], 这里即可不再显式依赖lombok包)

<!--所有子服务工程均需要的基础依赖包-->
<dependency><groupId>com.xx.bigdata</groupId><artifactId>service-base</artifactId><version>${service.base.version}</version></dependency>
<!--service-base中已有依赖, 这里即可不再显式依赖lombok包-->
<!--<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>-->

以上maven工程搭建设计,主要目的是要实现尽量避免子服务不必要的重复各写各的依赖, 减少依赖重复和版本混乱问题, 实际使用下来, 好处还是显而易见的, 但是某天突然遇一个非常规的问题, 接下来详细说下这个问题.

问题描述

以上案例中的配置, 正常情况下, 编译打包时maven会自动将lombok包添加到打包文件(lib)中, 服务启动时,类加载器即可从lib中找到相应的类, 完成正常加载运行.
但最近突然出现问题,具体现象为:

  1. 某天项目Jenkins发布报错, 启动时即报类加载失败:java.lang.ClassNotFoundException
  2. 我们打开打包生成的jar包,从lib中查找,发现这个lombok丢失了
  3. 本地使用idea lifecyle中的clean packge打包后直接本地启动服务正常
  4. 本地mvn clean package 生成的jar包使用java -jar 启动与Jenkins发布结果一样报错.

这种问题最棘手之处可能在于冷门, 花了两天, 翻找了各大网站, 排查了各种可能性;都毫无进展, 甚至还试了一下时下比较火的chatGPT, 结果几番追问下来好像它也懵了, 直接给你说这样依赖不行:
在这里插入图片描述
按理说, 问题到这基本上也就只能认了, 好在保底的做法就是每个子服务分别重新显式依赖所需的jar包, 问题可以初步解决, 也算是问题不大, 无非是不好用而已.

那么最终问题如何解决的?

解决方式

通常非常规的问题, 都是非常规的原因导致, 最终解决可能也就不是什么正经的方法.
在问题发生第几天后, 每天各种尝试, 百思不得其解, 一个偶然的日志引起了我的注意, 最带来了这次问题的最终解决办法:
在某一次mvn clean package的时候,注意到一个这样的日志(不怎么起眼):

[Warnning]The POM for com.xx.bigdata:service-base:jar:1.0.1 is invalid, 
transitive dependencies (if any) will not be available, enable debug logging for more details

原来编译打包日志不会太在意, 现在黔驴技穷,无论发现个什么都觉得可疑, 尤其是这个: transitive dependencies 突然让人感觉很可能是跟这个有关!
于是,直接先问问chatGPT这个问题,看到如下答案:
在这里插入图片描述
到现在基本可以判断,大概率是这个问题导致, AI给了参考解决思路(不算太靠谱) 但是结合maven仓库结构和多人合作开发Git管理代码场景, 稍微分析就知道, 最终原因: 父工程pom结构损坏,或者有伙伴误动到了远程仓库(公司)的pom结构, 导致mvn package 部分依赖包传递失效.

最终解决:

1.父工程,最顶层clean->packge->install
2.本地尝试: mvn clean package 观察日志,发现已经不再报警告
3.查看生成的jar包, 发现compile级别的依赖已经出现在lib下
4.从远程仓库删除原来的项目目录, 本地重新deploy正常的结构;

至此,问题解决.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用chatGPT搭配plantUML生成UML图

是不是感觉自己画uml图繁琐复杂没思路&#xff0c;画出来的uml图太简单&#xff1f;那就快来试试利用chatGPT搭配plantUML生成UML图&#xff0c;一键生成&#xff0c;自己调试解放双手&#xff0c;开拓思维&#xff0c;快来试试吧&#xff01; 在chatGPT中生成plantUML代码 如果…

谷歌发文批评苹果:实在是 “拖大家后腿”

1992 年 12 月 3 日&#xff0c;世界上第一条 SMS 消息成功发送&#xff0c;如今已经过去 30 周年。在这个关键节点&#xff0c;谷歌再度发文赞美 RCS 短信标准&#xff0c;并批评苹果迟迟不采用该标。 RCS 全称 Rich Communication Suite - 富媒体通信标准&#xff0c;属于高…

库克「豪赌」MR:七年磨一剑,不行也得行

苹果MR是一款在重重阻力之下、由库克强行拍板推向市场的产品。 作者&#xff1a;常嘉帅 “你们看懂了吗&#xff08;Are you getting it&#xff09;?”乔布斯这样问&#xff0c;“一台音乐播放器&#xff0c;一部手机&#xff0c;和一部互联网通讯设备。” 乔布斯以他魅力十足…

我问了10个博客专家好友,原来他们都在用这些高效率软件

大家好&#xff0c;我是记得诚。 在CSDN上我认识了很多大佬级别的博客专家&#xff0c;最近询问了我的10个博客专家好友&#xff0c;向他们取经&#xff0c;扒出了他们珍藏的高效率软件&#xff0c;很多软件我用完之后&#xff0c;当场发出了OMG的尖叫&#xff0c;我重度使用了…

何同学采访苹果CEO库克上热搜,网友表示自愧不如

昨日&#xff0c;22岁B站知名UP主“老师好我叫何同学”采访了苹果CEO蒂姆-库克&#xff0c;登上微博热搜榜&#xff0c;引起了网友们的热议。 何同学是北京邮电大学学霸&#xff0c;22岁的大学生&#xff0c;出于兴趣的原因在B站注册账号发布数码产品的测评视频&#xff0c;他做…

“AI教父”李开复筹办新公司,掘金 AI 2.0 三个大方向

图片&#xff1a;由无界AI画图工具生成 3月19日&#xff0c;创新工场董事长兼CEO李开复在朋友圈宣布&#xff0c;正在筹组一个名为“Project Al 2.0”的新公司&#xff0c;一个旨在探索AI2.0的创新项目。 图片&#xff1a;李开复在朋友圈紧急“摇人”PK chatGPT 目前&#xff0…

谁能真正替代你? AI编码工具深度对比 (chatGPT/Copilot/Cursor/New Bing)

写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了&#xff0c;作为一个被裹挟在AI时代浪潮中的程序员&#xff0c;在这几个月里我也是异常兴奋和焦虑。甚至都兴奋的不想拖更了。不仅仅兴奋于AI对于我们生产力的全面提升&#xff0c;也焦虑于Copilot等AI辅助编码工具&…

【ChatGPT】《ChatGPT 算法原理与实战》1: 引言:从 CNN、RNN 到 Transformers 架构、自注意力机制(图文+数学公式+代码实例详解)

文章目录 1: 引言:从 CNN、RNN 到 Transformers自然语言处理的挑战传统方法的限制Recurrent neural networks | 循环神经网络How RNN works : RNN 的工作原理RNN 的数学模型最新研究发展:RNN、LSTM等Transformers的出现GPT和ChatGPT2: 基本概念编码器解码器训练 Transformer …

解放创作生产力:30+实用AI工具汇总

除了ChatGPT&#xff0c;还有哪些好用AI工具&#xff1f; 带着这个问题&#xff0c;也为了解AIGC已经在哪些场景落地&#xff0c;我体验了30多个AI工具并且分享出来&#xff0c;希望对你有帮助。 文字 ChatGPT —— 解决任何问题 地址&#xff1a;https://chat.openai.com/ch…

《花雕学AI》ChatGPT的技术原理、算法竞争力、应用场景以及未来发展方向

一、ChatGPT是一个可以和你聊天的人工智能程序&#xff0c;它可以用文字回答你的问题&#xff0c;也可以根据你的提示写出文章、歌词、代码等内容。ChatGPT是由一个叫OpenAI的机构开发的&#xff0c;它使用了一种叫做GPT的技术&#xff0c;这种技术可以让它从互联网上学习大量的…

谷歌账号被封怎么办?谷歌账号解封申诉步骤请收好!

谷歌账号有多重要&#xff1f;相信很多跨境人和社媒营销人都会深有感悟的&#xff0c;谷歌账号可以说是国外互联网的一个通行证&#xff0c;国外非常多的网站都是支持使用谷歌账号登录的。 谷歌账号对企业进军海外市场是非常重要的存在&#xff0c;然而谷歌账号一旦操作不当是很…

ChatGPT MidJourney 生成动画故事

chatgpt是真的火了&#xff0c;chatgpt产生了一个划时代的意义——自chatgpt起&#xff0c;AI是真的要落地了。 chatgpt能做的事情太多了&#xff0c;多到最初开发模型的程序员自己&#xff0c;也没法说得清楚chatgpt都能做啥&#xff0c;似乎只要你能想得到&#xff0c;它都有…

100天精通Python丨黑科技篇 —— 20、Python 修图(滤镜、灰度、裁剪、视觉处理、图像分割、特征提取)

文章目录 一、PIL 常规修图操作1. 读取图片2. 图片缩放3. 图片旋转4. 图片裁剪5. 图片滤镜二、OpenCV 图像处理、视频处理、对象识别三、scikit-image 视觉算法,包括滤波、形态学操作、图像分割、特征提取四、TensorFlow 图像分类、目标检测、图像生成有些小伙伴可能还不知道,…

AIGC是日烧百万的销金窟,但有应用场景的公司不在乎

梦晨 衡宇 发自 凹非寺量子位 | 公众号 QbitAI 没想到&#xff0c;第一批AI绘画产品已经开始倒闭了…… StockAI&#xff0c;成立仅4个月&#xff0c;在2022年底因用户付费无法覆盖成本&#xff0c;遗憾宣布关闭平台、退款。 以3月的付费AI绘画平台Midjourney推出为标志&#x…

重磅消息!GPT Plus 暂停升级?刚刚恢复啦!

ChatGPT目前是最火的产品&#xff0c;很多同学都在用GPT帮助自己工作&#xff0c;学习&#xff0c;提高效率&#xff01;尤其是GPT4&#xff0c;性能强GPT3.5很多倍&#xff01; 一旦用上了GPT4你会发现&#xff0c;真的是离不开它&#xff01;这个超强的人工智能&#xff0c;几…

自媒体大咖经验分享

&#x1f469;&#x1f3fc;‍&#x1f4bc;&#x1f469;&#x1f3fc;‍&#x1f4bc;2023下班后干什么&#xff1f; &#x1f484;&#x1f484;做自媒体啊&#xff01; &#x1f48b;&#x1f48b;现在不卷&#xff0c;更待何时&#xff1f; ✍&#x1f3fc;✍&#x1f3fc…

个人电脑应用常识记录

查看当前电脑所连接WIFI 密码EE 知识参考CSDN markdown 导出成 wordCSDN markdown 实现页内跳转SSD 硬盘检测软件推荐CPU 检测工具CPU-Zios - SMB 配置&#xff08;实测可用&#xff09;Win 10 LTSC 安装 Microsoft StoreWin 10 LTSC 安装 Microsoft Store 方法二AD16 安装&…

Ubuntu20.04 -- 小白系列3 之小笔记(含ubuntu向日葵远程系统切换)

目录 1、4K高清壁纸 2、Ubuntu强制重启或关机&#xff0c;出现you are in emergency mode 3、提醒休息软件pomatez(下载deb文件) 4、如何设置开机启动选项的等待时间 5、福昕PDF下载 6、cmake..报错 7、 错误 由于没有公钥&#xff0c;无法验证下列签名 8、无法连接&am…

上知天文,下知地理,还能替人写脚本!人工智能的进阶ChatGPT

ChatGPT是OpenAI在11月30日推出的聊天机器人&#xff0c;于12月1日起对公众免费开放。 自从这东西出来之后&#xff0c;大家对此的讨论热情越发浓烈。ChatGPT具体可以干些什么&#xff1f; 帮你写论文、检讨书、情书&#xff0c;甚至情诗也能信手拈来。 以上都是网友测试它写…

ChatGPT,让程序员从一片黑暗森林奔向另一片黑暗森林!

几年前看过一个电影&#xff0c;叫做《隐藏人物》&#xff0c;主要讲三位女性在NASA工作时反抗“种族歧视”和“性别歧视”的故事&#xff0c;其中有个情节让我印象极其深刻&#xff1a; NASA计算部门有一群女生&#xff0c;她们的工作是计算飞船轨道&#xff0c;纯手工计算。 …