0

我正在连接到 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 不是为那样使用而设计的。

那么,我应该怎么做才能解决这个问题呢?

4

2 回答 2

1

你不能。这不是 Maven 的问题,而是标准 Java 类加载基础设施的问题。

从理论上讲,您可以使用 OSGi 之类的东西,它将类加载器分区并允许多次导入具有相同完全限定名称的类,但这会增加相当大的复杂性。

我会确定1.8 库不能与 1.6 通信(数据库驱动程序通常是向后兼容的),如果不能,则重新组织您的项目以提供适配服务。看来您可能误解了什么是 Calcite,因为它本身是一个适配层,而不是存储服务,您可能只需要将 1.6 到 1.8 中编写的任何查询更新。

于 2016-07-14T09:18:05.870 回答
0

我无法解释如何让 Avatica 1.6 和 1.8 在 maven 中一起工作。看起来我们在 CALCITE -836CALCITE-1213中破坏了 Avatica 的向后兼容性,我代表 Apache Calcite Avatica 开发团队向您道歉。

我登录KYLIN-1898来升级 Kylin 使用的 Avatica 版本。

于 2016-07-15T18:26:27.363 回答