2012-02-14 14 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)