Azure Eventhub项目引入Servicebus报NoClassDefFoundError

2024-02-28 06:12

本文主要是介绍Azure Eventhub项目引入Servicebus报NoClassDefFoundError,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前提

现有项目使用azure eventhub作为IOT数据载体进行数据传输。由于业务需要,需要同时引入servicebus。

 <dependency><groupId>com.azure</groupId><artifactId>azure-messaging-servicebus</artifactId><version>7.13.3</version></dependency><dependency><groupId>com.azure</groupId><artifactId>azure-messaging-eventhubs</artifactId><version>5.11.1</version></dependency><dependency><groupId>com.azure</groupId><artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId><version>1.12.0</version></dependency>

错误

当引入servicebus jar后,单独写main测试类servicebus运行正常,但将servicebus服务注册到spring之后,启动项目eventhub相关类会抛出如下异常:
    java.lang.NoClassDefFoundError: com/azure/core/amqp/implementation/TracerProvider

Caused by: java.lang.NoClassDefFoundError: com/azure/core/amqp/implementation/TracerProviderat com.azure.messaging.eventhubs.EventHubClientBuilder.buildAsyncClient(EventHubClientBuilder.java:813)at com.azure.messaging.eventhubs.EventHubClientBuilder.buildAsyncProducerClient(EventHubClientBuilder.java:743)

分析

报错的包位于core目录,这是eventhub和servicebus共同依赖的项,因此大概率是因为引入servicebus后由于依赖冲突导致eventhub依赖项版本不对所以运行失败。
    

解决

通过Dependency Analyzer看到eventhub与servicebus所依赖的azure-core,azure-core-amqp版本的确冲突。

通过尝试调整eventhub及servicebus版本解决冲突

    <dependency><groupId>com.azure</groupId><artifactId>azure-messaging-eventhubs</artifactId><version>5.15.1</version></dependency><dependency><groupId>com.azure</groupId><artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId><version>1.16.2</version></dependency><dependency><groupId>com.azure</groupId><artifactId>azure-messaging-servicebus</artifactId><version>7.13.1</version></dependency>

至此,该问题得以解决,项目运行正常。

总结

maven冲突是很常见的现象,有些冲突也不会影响项目正常运行,依赖冲突出现的时候,Maven版本选择主要有以下两个原则:

  1. 最短路径优先原则:当存在多个版本的同一个依赖时,Maven会选择依赖路径最短的版本。例如,如果A->B->C(1.0)和A->D->C(2.0),那么C(1.0)会被选择,因为B到C的路径比D到C的路径更短。
  2. 第一声明优先原则:在pom.xml文件中定义的依赖,以首先定义的依赖为基准。如果两个依赖声明了同一个依赖,但是版本不同,那么先声明的版本将被使用。

解决maven冲突最好是通过调整依赖版本使之一致,当然还有其他办法,比如:

  1. 排除:如果某个依赖引入了不需要的传递依赖,可以在该依赖声明中使用exclusions标签排除不需要的传递依赖。例如,如果A依赖引入了B,而B又引入了C,但你不想要C,你可以在A的依赖声明中排除C。
  2. 版本锁定:在pom.xml文件的<dependencyManagement>标签中,可以指定某个依赖的版本,这样无论在哪个模块中引入该依赖,都会使用指定的版本。这样可以确保整个项目中该依赖的版本一致,避免版本冲突。

这篇关于Azure Eventhub项目引入Servicebus报NoClassDefFoundError的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754605

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav