java.lang.NoSuchMethodError при переходе с owl-api 3.5 на 4.x

Я использовал owl-api версии 3.5 и теперь хотел бы перейти на версию 4, но получаю исключение во время выполнения. Как и в следующем примере кода (который отлично работает с версией 3.5), ошибка java.lang.NoSuchMethodError возникает каждый раз при вызове функции «manager.addAxiom(...)».

WLOntologyManager manager = OWLManager.createOWLOntologyManager();
IRI ontologyIRI = IRI.create("http://example.com/owlapi/families");
OWLOntology ont = manager.createOntology(ontologyIRI);      
OWLDataFactory factory = manager.getOWLDataFactory();

OWLIndividual john = factory.getOWLNamedIndividual(IRI.create(ontologyIRI + "#John"));
OWLIndividual mary = factory.getOWLNamedIndividual(IRI.create(ontologyIRI + "#Mary"));
OWLObjectProperty hasWife = factory.getOWLObjectProperty(IRI.create(ontologyIRI + "#hasWife"));
OWLObjectPropertyAssertionAxiom axiom1 = factory.getOWLObjectPropertyAssertionAxiom(hasWife, john, mary);

manager.addAxiom(ont, axiom1);
...

Все выброшенное исключение говорит:

Exception in thread "main" java.lang.NoSuchMethodError: org.semanticweb.owlapi.model.OWLOntologyManager.addAxiom(Lorg/semanticweb/owlapi/model/OWLOntology;Lorg/semanticweb/owlapi/model/OWLAxiom;)Lorg/semanticweb/owlapi/model/parameters/ChangeApplied;
at de.ifak.Writer.OWL.Example.OWLMinimalTest.main(OWLMinimalTest.java:26)

Я протестировал код в чистом проекте Java и добавил руководство по зависимостям owl-api, а затем и maven. Я тестировал его с версиями 4.0.2 и 4.1.0-RC2. Оба показали одинаковое поведение.

Я не мог найти никакого решения для этого. Поэтому я надеюсь, что кто-то может мне помочь.

Спасибо,

Крис


person Chris    schedule 13.10.2015    source источник


Ответы (2)


Хорошо, я нашел решение сам. Если я изменю код

manager.addAxiom(ont, axiom1);

to

Set<OWLAxiom> axiomsToAdd = new HashSet<OWLAxiom>();
axiomsToAdd.add(axiom1);        
manager.addAxioms(ont, axiomsToAdd);

все отлично работает, даже с версией 4.1 owl-api.

Редактировать: Хорошо, я сделал ошибку. Он отлично работает с версией 4.0.2, но с версией 4.1 я получаю то же исключение при вызове:

manager.addAxioms(ont, axiomsToAdd);

например, когда я звоню:

manager.addAxiom(ont, axiom1);
person Chris    schedule 14.10.2015

Метод addAxiom остался прежним, но тип возвращаемого значения изменился. Вы присваиваете возвращаемое значение переменной?

person Ignazio    schedule 14.10.2015
comment
Нет, я нашел, что пошло не так. У меня были старые версии (v3.5 и v4.0.2) owl-api в classpath. Когда я удалил эти версии из пути к классам, исключение исчезло. Теперь он работает и с версией 4.1 owl-api. - person Chris; 14.10.2015