`
翻滚吧--少年
  • 浏览: 25761 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何解决java工程中多个版本的包冲突问题

    博客分类:
  • Java
阅读更多
背景
最近工作上需要实现从mysql到hbase的实时数据同步的功能。经过多方了解,整理出解决方案:使用canal作为实时的数据源,然后开发一个client来完成与canal的对接,并将数据写入hbase数据库中。

问题
在开发接近尾声时,发现连接canal时需要使用protobuf-java-2.4.1.jar包,而连接hbase时则需要使用protobuf-java-2.5.0.jar。并且两者jar包无法兼容,使用任何一个jar都无法正常启动程序。

解决思路
为了程序能够正常运行,需要同时加载两个jar包。但是我们都知道,一个class在jvm内存中只有一份。
1.首先想到的是将canal中的protobuf版本升级至2.5.0,即修改canal源码使之使用2.5.0的jar包;
2.其次想到的合并2.4.1和2.5.0得到一个新的包,即比较2.4.1和2.5.0的不同之处,然后合并;
3.修改2.4.1中class的名字(通过修改package名)并重新打jar包,然后修改canal中引用到protobuf的地方并重新打jar包

事实证明第三种方法可行性最高,简单、方面又实用。
0
4
分享到:
评论
1 楼 zhuchao_ko 2014-12-04  
1、累
2、坑

相关推荐

    osgi解决不同版本jar包冲突的demo

    OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许在单个JVM上运行多个版本的相同库或服务,从而解决了不同版本jar包冲突的问题。本示例通过一个名为“myself”的工程,展示了如何...

    ​实现maven项目中多版本依赖兼容使用解决方案

    然而,当项目引入多个库时,可能会遇到依赖冲突的问题。依赖冲突通常发生在两个或更多库使用相同类的不同版本时,Maven默认会选择最高版本的依赖,但这可能导致运行时错误或不兼容性。在本案例中,公司需要使用一个...

    java打包技巧.rar

    JAR文件是一个包含多个类文件、资源文件以及元数据的压缩格式,它可以被Java虚拟机(JVM)直接识别和执行。打包JAR文件通常使用的是`jar`命令行工具,或者通过构建工具如Maven或Gradle来自动化这个过程。 Maven是一...

    java语言开发jar包_jar包_java_

    Java语言开发中的JAR(Java Archive)包是Java平台特有的文件格式,用于打包多个类文件、资源文件以及元数据,便于分发、部署和运行。JAR文件本质上是一个ZIP压缩文件,包含了.class文件和其他相关资源,它使得Java...

    JAVA工程师常见笔试题

    - 方法重载是指在同一个类中存在多个同名方法,但它们的参数列表不同。这个知识点在笔试题中通过一个类中有不同参数类型的方法来体现。 5. Java中字符串与基本数据类型的连接: - Java中字符串和基本数据类型连接...

    Java开发常见问题汇总.ppt

    在Java开发过程中,遇到...总之,Java开发中的问题涉及环境配置、IDE使用、代码编写等多个方面,了解这些问题的解决方案,有助于提升开发效率和代码质量。在日常工作中,不断学习和积累经验,才能更好地应对各种挑战。

    SOFAArk Project Java轻量级类隔离框架 v2.1.3

    实际开发中,可以采用多种方法来解决包冲突问题,比较常见的是类似 SpringBoot 的做法,统一管理应用所有依赖包的版本,保证这些三方包不存在依赖冲突。这种做法只能有效避免包冲突的问题,不能根本上解决包冲突的...

    java软件工程师面试常见问题

    15. **版本控制**:Git的常用命令和工作流,以及如何解决冲突,是现代软件开发的基本技能。 以上就是Java软件工程师面试中常见的知识点,每个领域都有其深度和广度,建议在准备面试时,不仅要掌握基础知识,还要...

    spring与hibernate的包冲突

    此外,他还可能提到了使用Maven或Gradle的排除依赖(exclude dependencies)功能,将冲突的库从一个或多个依赖中移除。 在源码层面,理解Spring和Hibernate的加载机制也很关键。Spring通过Bean工厂管理组件,而...

    亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。

    2. **DLL(Dynamic Link Library)**:DLL是Windows操作系统中的共享库,其中包含可由多个程序同时使用的函数和资源。Java通过JNA调用DLL,可以利用C/C++等编写的本地库功能。 3. **回调函数**:在C/C++编程中,回...

    工程中jar包管理工具---ivy

    "工程中jar包管理工具---ivy"的出现,就是为了有效地解决这个问题。Ivy是一个由Apache Ant项目维护的依赖管理工具,它允许开发者以声明式的方式管理项目所依赖的外部库,从而实现对JAR包的高效管理。这个工具的引入...

    多目标优化算法java.zip_affect4gx_java多目标优化_优化_多目标优化java_多目标优化算法

    在IT领域,优化是解决复杂问题的关键技术之一,特别是在软件工程和数据分析中。多目标优化是一种特殊的优化方法,它旨在同时最大化或最小化多个相互冲突的目标函数。在本压缩包"多目标优化算法java.zip_affect4gx_...

    Java编写的在多人线聊天室(Eclipse工程文件)

    4. **并发控制**:由于多个客户端可能同时向服务器发送消息,因此需要适当的同步机制,如synchronized关键字或java.util.concurrent包中的工具,以防止数据冲突和确保消息的正确顺序。 5. **事件驱动编程**:在GUI...

    JFREECHART中servlet包对于项目冲突的修改版

    这通常是由于类路径中存在多个版本的相同类导致的,比如`javax.servlet.*`中的类在不同库中重复出现。为了解决这个问题,我们需要对JFreeChart进行适当的修改,确保它与现有项目中的servlet包能够和谐共存。 标题...

    SOFAArk 是一款基于 Java 实现的动态热部署和轻量级类隔离框架.rar

    实际开发中,可以采用多种方法来解决包冲突问题,比较常见的是类似 SpringBoot 的做法,统一管理应用所有依赖包的版本,保证这些三方包不存在依赖冲突;这种做法只能有效避免包冲突的问题,不能根本上解决包冲突的...

    redis分布式锁工具包,提供纯Java方式调用,支持传统Spring工程.zip

    Redis 分布式锁工具包是为了解决在分布式系统中实现锁的问题,它提供了一种纯Java的方式来调用,使得在传统的Spring工程中可以轻松集成和使用。在现代的高并发、分布式环境下,单机锁已经无法满足需求,因为它们不能...

    棋盘问题(JAVA实现)

    在这个Java实现的版本中,我们可以探讨以下几个重要的知识点: 1. **棋盘问题**:通常指的是8x8的国际象棋棋盘,这里可能是指如何将8个皇后放置在棋盘上,使得任意两个皇后都无法在同一行、同一列或对角线上互相...

    Java工程建立共9页.pdf.zip

    以上是对Java工程建立的一些基本知识的概述,实际操作中可能还会涉及到更多细节,如配置管理、异常处理、日志记录、性能优化等。这份9页的PDF教程应该会涵盖这些内容,并提供具体的操作步骤和示例。对于初学者而言,...

    Java多线程技术在网络通信系统中的应用.pdf

    多线程技术是Java高级程序语言解决并发处理问题的核心方案,在网络通信系统设计和开发中扮演着关键角色。本文将深入探讨多线程技术在网络通信系统中应用的基本原理、实现机制以及安全性与同步控制的策略。 首先,要...

Global site tag (gtag.js) - Google Analytics