2012-02-14 38 views
1

我正在将使用Jena 2.6.4的现有OSGi项目转换为另一个框架(从Eclipse Equinox到Apache Felix与BndTools的组合)。关于Equinox的旧项目工作得很好,但是,我在新框架中遇到了一些麻烦。 为了将Jena库包含到我的项目中,我创建了一个新的“从现有JAR归档插件”。我将它导出到可部署的插件并将其放入我的本地存储库。从那里我可以将它添加到我的项目的构建路径。它似乎运作良好。它可以被编译,但是当我启动项目时,第一次访问Jena(createResource)时,org.xml.sax.SAXException上出现NoClassDefFoundException。 为了解决这个问题,我决定将Jena库升级到2.7(从a here)。所以我做了与上面完全相同的步骤。该项目再次可以进一步编译和运行。现在,createResource调用没有崩溃并且工作得很好。但是,该项目在执行SPARQL-Query时崩溃。以下是堆栈跟踪的摘录:在OSGi中使用Jena - javax/management/malformedObjectNameException中的NoClassDefFoundException

java.lang.NoClassDefFoundError: javax/management/MalformedObjectNameException 
    at com.hp.hpl.jena.query.ARQ.init(ARQ.java:437) 
    at com.hp.hpl.jena.query.ARQ.<clinit>(ARQ.java:456) 
    at com.hp.hpl.jena.query.Query.<clinit>(Query.java:62) 
    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:80) 
    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:52) 
    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:40) 
    at com.hp.hpl.jena.query.QueryExecutionFactory.makeQuery(QueryExecutionFactory.java:517) 
    at com.hp.hpl.jena.query.QueryExecutionFactory.create(QueryExecutionFactory.java:193) 

而且,实际上,我无法在Jena库中找到此异常的定义。我错过了什么?还是有其他想法,该如何解决?

尼科

+0

我可以通过修改Jena的OSGi包装项目来解决问题。当javax.management包作为依赖项添加时,那么一切运行良好。 – 2012-02-18 14:35:37

回答

0

以我为例,我需要这些JAR:

  • 耶拿-ARQ-2.9.0-incubating.jar
  • 耶拿核-2.7.0-incubating.jar
  • 耶拿-IRI-0.9.0-incubating.jar
  • xercesImpl-2.10.0.jar
  • ICU4J-3.4.4.jar

当我第一次遇到耶拿这个问题时,我错过了icu4j之一。

我会在这里发表的堆栈跟踪,以防有人谷歌:

java.lang.NoClassDefFoundError: Could not initialize class com.hp.hpl.jena.enhanced.BuiltinPersonalities 
     at com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:62) 
     at com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel(ModelFactory.java:142) 
     at com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel(ModelFactory.java:136) 
     at com.satukancinta.dump.command.SiteExport$$anonfun$doExecute$1$$anonfun$apply$1.apply(SiteExport.scala:198) 
     at com.satukancinta.dump.command.SiteExport$$anonfun$doExecute$1$$anonfun$apply$1.apply(SiteExport.scala:49) 
     at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) 
     at scala.collection.immutable.List.foreach(List.scala:45)