我连接到2个不同的数据库,他们的JDBC客户端都需要包org.apache.calcite.avatica
,一个使用版本1.6,另一个使用版本1.8,所以我需要安装两个版本( 1.6和1.8),似乎版本1.8与版本1.6不兼容,当我使用版本1.8而不是1.6时,引发了以下异常:
java.lang.AbstractMethodError
org.apache.calcite.avatica.AvaticaConnection.<init>(AvaticaConnection.java:117)
org.apache.kylin.jdbc.KylinConnection.<init>(KylinConnection.java:51)
org.apache.kylin.jdbc.KylinJdbcFactory.newConnection(KylinJdbcFactory.java:77)
org.apache.calcite.avatica.UnregisteredDriver.connect(UnregisteredDriver.java:143)
org.apache.kylin.client.method.KylinJdbcMethod.getJdbcConnection(KylinJdbcMethod.java:45)
org.apache.kylin.client.Kylin.getJdbcConnection(Kylin.java:175)
似乎Maven的设计并不像那样。
那么,我该怎么做才能解决这个问题?
答案 0 :(得分:1)
你做不到。这不是Maven的问题,它是标准Java类加载基础结构的问题。
理论上,您可以使用类似OSGi的东西,它可以对类加载器进行分区,并允许使用相同的完全限定名称多次导入类,但这会增加实质性复杂性。
我会使某些认为1.8库无法与1.6通信(数据库驱动程序通常是向后兼容的),如果不能,则重组您的项目以获得适配服务。您似乎可能误解了是什么Calcite ,因为它本身是一个适配层,而不是存储服务,您可能只需要更新1.6到1.8中编写的任何查询。
答案 1 :(得分:0)
我无法解释如何让Avatica 1.6和1.8在maven中相互协作。看起来我们在CALCITE-836或CALCITE-1213中打破了Avatica的向后兼容性,并且代表Apache Calcite Avatica开发团队,我道歉。
我已记录KYLIN-1898以升级Kylin使用的Avatica版本。