如何在Maven中安装两个不同版本的特定包?

时间:2016-07-14 09:01:15

标签: java maven version apache-calcite

我连接到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的设计并不像那样。

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

2 个答案:

答案 0 :(得分:1)

你做不到。这不是Maven的问题,它是标准Java类加载基础结构的问题。

理论上,您可以使用类似OSGi的东西,它可以对类加载器进行分区,并允许使用相同的完全限定名称多次导入类,但这会增加实质性复杂性。

我会使某些认为1.8库无法与1.6通信(数据库驱动程序通常是向后兼容的),如果不能,则重组您的项目以获得适配服务。您似乎可能误解了是什么Calcite ,因为它本身是一个适配层,而不是存储服务,您可能只需要更新1.6到1.8中编写的任何查询。

答案 1 :(得分:0)

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

我已记录KYLIN-1898以升级Kylin使用的Avatica版本。