2013-07-01 26 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之前使用。虽然没有保证(你必须测试它),这是值得一试。

如果失败了,您需要重建一个系统并调整需要更改的内容。这两个系统都是开源的,可以使用代码和构建系统。