首页 > 解决方案 > Jena TDB 数据集 begin() 失败

问题描述

我想在项目中使用 Jena TDB。这是我在 POM 中添加的内容:

<dependency>
    <groupId>org.apache.jena</groupId>
    <artifactId>apache-jena-libs</artifactId>
    <version>3.7.0</version>
    <type>pom</type>
</dependency>

这些是我与耶拿相关的进口:

import org.apache.jena.query.*;
import org.apache.jena.tdb.TDBFactory;

有趣的是,代码编译并且一切似乎都很好。我什至可以创建一个数据集并从中读取。

Dataset dataset = TDBFactory.createDataset(repoLocation);

当我正在编写一个多线程应用程序时,我正在按照文档begin中的建议调用该方法:

dataset.begin(ReadWrite.READ);

这导致:

Exception in thread "main" java.lang.AbstractMethodError: Class "org.apache.jena.tdb.transaction.DatasetGraphTransaction" does not implement the requested method

我感谢您的帮助!

标签: mavenjenasemantic-webtdb

解决方案


AbstractMethodError通常意味着您的类路径上存在不匹配的 JAR。有关此主题的一些讨论和相关链接,请参阅抽象方法错误

您需要检查您的依赖项和环境,以确保您在编译时与运行时没有不同的版本

mvn dependency:tree在您的项目上运行将打印出依赖关系树,如果您在 Maven 项目设置中以某种方式拥有多个版本的 Jena 库,该树应该会显示出来。

根据您打包和调用代码的方式,您可能还需要检查您的类路径是如何为运行时构建的,以及您的应用程序是如何打包的(特别是如果您使用 Maven Shade 插件或以其他方式创建 uber-jar)。如果没有这方面的任何细节,很难提供具体的建议。


推荐阅读