0

我正在做一个我想使用 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) 我正在开发一个不支持的开发网络连接到互联网。

4

3 回答 3

1

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

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

于 2013-07-02T11:23:11.010 回答
0

除非我绝对必须这样做,否则我不会使用这两个库,直到它们具有相同的版本。

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

于 2013-07-01T14:04:12.807 回答
0

The solution was to change the order of the libraries so that the library with the newer version of SLF4J (Apache Jena) was before the older version(s) on the build path.

于 2014-01-24T11:38:03.637 回答