2016-07-14 80 views
0

我連接到2個不同的數據庫,他們的JDBC客戶端都需要包org.apache.calcite.avatica,一個使用1.6版,另一個使用1.8版,所以我需要安裝兩個版本(1.6和1.8),似乎該版本1.8是不是1.6版本,兼容當我使用的版本1.8,而不是1.6,以下異常被拋出:如何在Maven中安裝兩個不同版本的特定軟件包?

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

發佈'mvn dependency:tree'的輸出。你仍然有可能以某種方式拉入可以調和的不匹配版本。 – chrylis

回答

1

你不能。這對Maven來說不是問題,這是標準Java類加載基礎結構的問題。

理論上講,你可以使用類似OSGi的東西,它可以將類加載器分割出來,並允許多個具有相同完全限定名稱的類的導入,但這會增加顯着的複雜度。

我會讓某些 1.8庫無法與1.6通信(數據庫驅動程序通常是向後兼容的),如果它不能,然後重新組織您的項目有一個適應服務。看起來你可能誤解了Calcite是,因爲它本身是一個適配層,而不是存儲服務,你可能只需要更新1.6到1.8的任何查詢。

+0

但問題是,方案需求不是我自己直接需要的,而是由兩個不同的db的jdbc客戶端,我不能更改jdbc客戶端內的代碼... – luochen1990

0

我無法解釋如何讓Avatica 1.6和1.8在maven中一起工作。它看起來像我們打破了在Avatica的CALCITE-836CALCITE-1213的向後兼容性,並代表Apache Calcite Avatica開發團隊表示歉意。

我登錄KYLIN-1898來升級Kylin使用的Avatica版本。

相關問題