使用Jena和Pellet; NoClassDefFoundError异常

时间:2015-02-28 11:44:25

标签: java jena pellet

我试图将Jena 2.12.1与Pellet一起使用;我从他们的网站Jena 2.12.1下载了最新的Apache Jena库。

首先,我下载了Pellet 2.3.1并导入了JENA库。不幸的是,org.mindswap.pellet.jena.PelletReasonerFactory无法解决,因此,我无法实例化推理。

然后,我下载了多个版本的jar文件pellet-jena-2.3.2(试过2.3.1和2.3.0)。这解决了org.mindswap.pellet.jena.PelletReasonerFactory。然而它引起了例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/mindswap/pellet/utils/progress/ProgressMonitor
at org.mindswap.pellet.jena.PelletReasoner.bind(PelletReasoner.java:95)
at org.mindswap.pellet.jena.PelletReasoner.bind(PelletReasoner.java:53)
at com.hp.hpl.jena.rdf.model.ModelFactory.createInfModel(ModelFactory.java:261)
at code.BasicOWLHandler.main(BasicOWLHandler.java:678)
Caused by: java.lang.ClassNotFoundException: org.mindswap.pellet.utils.progress.ProgressMonitor


at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more

我的代码:

import org.mindswap.pellet.jena.PelletReasonerFactory;
import com.hp.hpl.jena.rdf.model.InfModel;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.reasoner.Reasoner;

public class Test {
public static void main (String [] args)
{
    Reasoner reasoner = PelletReasonerFactory.theInstance().create();

    // create an empty model
    Model emptyModel = ModelFactory.createDefaultModel( );

    // create an inferencing model using Pellet reasoner
    InfModel model = ModelFactory.createInfModel( reasoner, emptyModel );
}   
}

有什么问题?是否有更好的方法将jena 2.12.1与Pellet(任何版本)一起使用?

3 个答案:

答案 0 :(得分:1)

错误消息显示从org.mindswap.pellet.utils.progress.ProgressMonitor调用时无法找到org.mindswap.pellet.jena.PelletReasoner.bind。看起来类路径没有所有必需的Pellet罐子。这跟耶拿没什么关系。

但是,请参阅http://clarkparsia.com/pellet/faq/different-jena-version/。 由于2年以上的差距,颗粒不太可能与Jena 2.12.1完美配合。

您可能希望尝试使用此分支或其中一个分支:https://github.com/ansell/pellet(无论如何都不推荐)

您提供给Jena的链接不是主站点 - 它看起来像是http://www.apache.org/dist/jena的镜像。

答案 1 :(得分:1)

如果有人遇到此问题并希望将Jena 2.13 与Pellet一起使用,那么可以使用Pellet 2.4 < 2015年7月14日 / strong>即可。请参阅提交#7b07bf

获取并运行您只需通过克隆其repo并运行mvn compile来自行构建JAR。它们还包括an example使用Jena 2.13。

要将Pellet与Jena一起使用,请按照their FAQs上的说明进行操作:

// ontology that will be used
String ont = "http://www.mindswap.org/2004/owl/mindswappers";

// create an empty ontology model using Pellet spec
OntModel model = ModelFactory.createOntologyModel( PelletReasonerFactory.THE_SPEC );   

// read the file
model.read( ont );

答案 2 :(得分:0)

使用pellet-2.3.0(2011年8月22日),包括JENA兼容的librairies而不是pellet-2.3.1解决了这个问题。