2013-07-01 78 views
0

我正在開發一個項目,我想使用Apache Tika和Apache Jena。然而,當我嘗試運行該項目,我得到以下異常:使用Java庫具有不兼容的依賴關係

java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String; Ljava/lang/Object;Ljava/lang/Throwable;)V 

我的理解是,這是因爲Apache提卡包括舊版本SLF4J的(預1.6.0)和Apache耶拿包括新版本(1.6.0或更高版本),並且SLF4J的兩個版本之間存在重大變化。

我該如何解決這個問題,以便我可以同時使用Tika和Jena?

一些現有的文章談到了使用Maven來解決這個問題,但是a)我不使用Maven,並且我不太熟悉它來完全理解解決方案,b)我正在開發網絡沒有連接到互聯網。

+3

第二點是無關緊要的 - 你可以有一個本地的Maven回購代理。無論如何,你控制什麼最終在你的類路徑?把最新版本的slf4j放到classpath中,你應該沒問題。老版本的slf4j缺乏功能,但新版本向後兼容。 –

回答

0

解決方案是更改庫的順序,以便使用較新版本的SLF4J(Apache Jena)的庫位於構建路徑上的舊版本之前。

1

SLF4J實際上是不同版本的許多用途相當兼容。 Jena不使用SLF4j的許多功能。就我所知,它不包含LocationAwareLogger。它可以在1.6.X之前使用。雖然沒有保證(你必須測試它),這是值得一試。

如果失敗了,您需要重建一個系統並調整需要更改的內容。這兩個系統都是開源的,可以使用代碼和構建系統。