使用具有不兼容依赖性的Java库

时间:2013-07-01 13:58:50

标签: java slf4j jena apache-tika

我正在开发一个项目,我想使用Apache Tika和Apache Jena。但是,当我尝试运行项目时,我得到以下异常:

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 Tika包含旧版本的SLF4J(1.6.0之前版本)和Apache Jena包含更新版本(1.6.0或更高版本),并且两个版本之间存在重大变化SLF4J。

如何解决这个问题,以便我可以同时使用Tika和Jena?

现有的一些帖子谈到使用Maven来解决这个问题,但是a)我没有使用Maven,我不熟悉它以完全理解解决方案和b)我正在开发一个开发网络没有连接到互联网。

3 个答案:

答案 0 :(得分:1)

实际上,对于许多用途,slf4j实际上是兼容的。 Jena没有使用SLF4j的许多功能。据我所知,它不是LocationAwareLogger。它可能适用于1.6.X之前的版本。虽然没有任何保证(AKA你必须测试它),但值得一试。

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

答案 1 :(得分:0)

我不会使用这两个库,除非我必须这样做。

如果您这么认为,那么问题的一个很好的解释就是:java-classpath-classloading-multiple-versions-of-the-same-jar-project

答案 2 :(得分:0)

解决方案是更改库的顺序,以便具有较新版本的SLF4J(Apache Jena)的库位于构建路径上的旧版本之前。