hive-exec.jar与Simba JDBC For Google Bigquery依赖jar包冲突问题解决方案

本文主要是介绍hive-exec.jar与Simba JDBC For Google Bigquery依赖jar包冲突问题解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

hive-exec.jar与Simba JDBC For Google Bigquery依赖jar包冲突问题解决方案

  • 问题背景
  • 问题产生原因
  • 问题解决方案
  • 结论

问题背景

在实际项目中,当我们同一个项目的maven依赖同时依赖hive-exec.jar和Simba JDBC For Google Bigquery依赖的guava.jar包时,在运行项目时,会报错找不到exhaust方法。

网上查询了其他人的解决方案: hive-exec包guava冲突解决

问题产生原因

原因是hive-exec.jar中依赖了guava.jar,guava版本为14.0.1,而JDBC For Google Bigquery依赖的guava.jar包为30.1.1-android,利用反编译软件Luyten查看这两个jar包中com.google.common.io这个包中的ByteStreams类中是否含有exhaust方法,
在这里插入图片描述
在这里插入图片描述
由上可见,在guava.jar中是有exhaust方法的,但是hive-exec.jar中却没有。由于guava.jar是无法向下兼容的。所以必须让两个版本同时存在,所以无法使用maven的exclusion这种方法来排除低版本的依赖。

问题解决方案

试了网上很多解决方法之后,我发现了一个解决冲突的神器——maven-shade-plugin插件。使用这种插件可以完全解决,两种不同版本的jar同时存在一个项目的问题。解决具体步骤如下:

  1. 将引用高版本和低版本的pom依赖区分开,创建一个新的module,将所有的高版本或所有的低版本的pom依赖放在该module的pom中,如下所示:

在这里插入图片描述

  1. 添加插件maven-shade-plugin。
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><createDependencyReducedPom>true</createDependencyReducedPom><relocations><!-- 多个包需要替换使用多个relocation--><relocation><!-- pattern 为需要匹配的前缀--><pattern>com.google.common</pattern><!-- shadedPattern 为替换成什么前缀--><shadedPattern>com.shade.google.common</shadedPattern></relocation></relocations></configuration></execution></executions></plugin></plugins></build>
  1. 使用maven编译打包,会发现有两个jar包,一个是原始的jar包,一个是经过插件处理的jar包。在这里插入图片描述
  2. 使用反编译软件分别打开test-1.0-SNAPSHOT.jar包,如下:
    在这里插入图片描述
    在这里插入图片描述
  3. 将test-1.0-SNAPSHOT.jar上传到公司的maven库里面,然后再依赖公司的maven库中的依赖就可以成功运行了,这样依赖冲突的问题就完全解决了。

结论

产生问题的原因是:同一jar包,不同版本在同一个项目中时,高版本在调用方法时,由于包的路径是一样的,maven有可能只加载了低版本的jar包方法,从而导致了找不到类或方法。maven-shade-plugin插件的功能其实就是可以将jar包中包的路径用别名替换,可以将包中的所有import包的路径全都替换为别名,这样就使得同一jar包不同版本的包的路径不一样,这样jvm就会同时加载高低两个版本的jar包,就不会提示找不到该方法啦。

这篇关于hive-exec.jar与Simba JDBC For Google Bigquery依赖jar包冲突问题解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo