2017-12-11 14 views
0

KarafでバンドルとしてデプロイされているApache POIを使用してExcelを読み込もうとしています。順序どおりjava.lang.NoClassDefFoundError:org/apache/poi/POIXMLDocument

中古POIバージョン:

  • POI-3.11.jar
  • POI-OOXML-3.11.jar
  • POI-OOXML-スキーマ-3.11.jar

feature.xmlスニペット(Karafのバンドルをラップする場合):

<bundle>wrap:mvn:org.apache.poi/poi/3.11</bundle> 
<bundle>wrap:mvn:org.apache.poi/poi-ooxml/3.11</bundle> 
<bundle>wrap:mvn:org.apache.poi/poi-ooxml-schemas/3.11</bundle> 

のpom.xml(依存瓶)Karafにプロジェクト内の依存関係だけでなく、バ​​ンドルとして使用瓶の上

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>3.11<version> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>3.11<version> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml-schemas</artifactId> 
    <version>3.11</version> 
</dependency> 

試したservicemix POIのバージョン。しかし、それは助けにもならない。

私はNoClassDefFoundErrorがランタイムエラーであることを理解しています。これは、実行時にクラスが見つからないために発生します。この問題の解決方法を教えてください。

スタックトレース:

java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocument 
    at java.lang.ClassLoader.defineClass1(Native Method)[:1.8.0_25] 
    at java.lang.ClassLoader.defineClass(Unknown Source)[:1.8.0_25] 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2128) 
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1432) 
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843) 
    at java.lang.ClassLoader.loadClass(Unknown Source)[:1.8.0_25] 
    at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1317) 
    at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1481) 
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1427) 
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843) 
    at java.lang.ClassLoader.loadClass(Unknown Source)[:1.8.0_25] 
+0

おそらくクラスパスに同じクラスの複数のバージョンがあるようです。 – muasif80

+0

なぜApache POIの古いバージョンを使用していますか?最新のApache Servicemix POIバンドルを手に入れたらどうなりますか? – Gagravarr

答えて

0

私はむしろ直接POIをServiceMixのバンドルを使用するプロジェクトで働いてきました。

<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.poi/3.15_1</bundle> 
+0

私の場合は、すでに純粋なPOIを使用しているバンドルがあります。私は今、servicemixに移動することはできません。 – Arun

+0

パッケージをPOIからマニフェストにインポートしましたか?次のように、動的インポートをインポートまたは使用する必要があります。 *