Набор данных 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

Я ценю вашу помощь!


person Janothan    schedule 07.06.2018    source источник


Ответы (1)


AbstractMethodError обычно означает, что в вашем пути к классу каким-то образом есть несоответствующие JAR-файлы. См. Ошибка абстрактного метода для некоторого обсуждения и связанных ссылок по этой теме.

Вам нужно проверить свои зависимости и свою среду, чтобы убедиться, что у вас нет разных версий во время компиляции и во время выполнения.

mvn dependency:tree run в вашем проекте распечатает дерево зависимостей, которое должно показать, есть ли у вас несколько версий библиотек Jena в настройке вашего проекта Maven.

В зависимости от того, как вы упаковываете и вызываете свой код, вы, вероятно, также захотите проверить, как создается ваш путь к классам для среды выполнения и как упаковано ваше приложение (особенно если вы используете плагин Maven Shade или иным образом создаете uber-jar). Без каких-либо подробностей по этому поводу трудно дать конкретный совет.

person RobV    schedule 07.06.2018