问题描述
我收到此错误消息
启动应用程序时出错:创建查询引擎 Drools 时出错。异常:java.lang.NoSuchMethodError。消息:'void org.semanticweb.owlapi.util.PriorityCollection.add(java.io.Serializable)'
我使用 swrl API for Java 在 OWL 本体上运行 SQWRL 查询。因此,我从 Maven 构建了 edu.stanford.swrl swrlapi-example,在 pom 文件中更新了默认的 swrl API 和 swrlapi-drools-engine 从版本 1.0.3 到 2.0.9,以及从默认的 4.2.3 到 5.1 的 owl API。 17.我在可执行文件 main 中运行此代码:
OWLOntologyManager ontologyManager = OWLManager.createOWLOntologyManager();
File file = new File("C:\\Users\\Hugo\\Desktop\\Universidad\\SUPAERO\\S4\\swrlapiTEST\\Prueba.owl");
OWLOntology ontology = ontologyManager.loadOntologyFromOntologyDocument(file);
ontologyManager.createOntology();
SQWRLQueryEngine queryEngine = swrlAPIFactory.createSQWRLQueryEngine(ontology);
程序在最后一个命令处停止。我不知道我做错了什么。如果我使用 swrl api 和 swrlapi-drools-engine 的 1.0.3 版,它可以工作,但我想使用 tBox 和 aBox 库中包含的一些命令,这些命令在那个古老的版本中没有实现。
解决方法
您看到的异常是类路径中存在多个不兼容的 OWLAPI 版本的症状。确保你只使用了一个版本(你所说的 5.1.17)。如果找不到问题,请添加有关如何设置类路径的详细信息(您可以在代码开头打印 java.class.path 环境变量以获取正在使用的确切类路径)。