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

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

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

[b]解决思路[/b]
为了程序能够正常运行,需要同时加载两个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包

事实证明第三种方法可行性最高,简单、方面又实用。

你可能感兴趣的:(Java)