web-dev-qa-db-ja.com

NoClassDefFoundError org / Apache / poi / ss / usermodel / Workbook

Javaクラスを呼び出してデータベースからデータを取得し、そのデータを使用してExcelレポートを作成するシェルスクリプトを実行しています。スレッド "main" Java.lang.NoClassDefFoundErrorでエラーExceptionが発生します。 :コードが私のJavaクラス:

XSSFWorkbook  workbook = new XSSFWorkbook ();

これが私がクラスパスを定義した方法です:

CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-2.5.1-final-20040804.jar
CLASSPATH=${CLASSPATH}:<path-to-jars>/poi-ooxml-3.11.jar

Jarファイルが(gradle経由で)ダウンロードされていることを確認したので、ここで何が欠けているのかを理解しようとしました。誰かがこれを手伝ってくれませんか?

スタックトレース:

    Exception in thread "main" Java.lang.NoClassDefFoundError: org/Apache/poi/ss/usermodel/Workbook
        at Java.lang.ClassLoader.defineClass1(Native Method)
        at Java.lang.ClassLoader.defineClass(ClassLoader.Java:800)
        at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
        at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:449)
        at Java.net.URLClassLoader.access$100(URLClassLoader.Java:71)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:361)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:425)
        at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:358)
        at com.test.ExcelReportGenerator.writeExcel(ExcelReportGenerator.Java:26)
        at com.test.ReportRunner.createReport(ReportRunner.Java:109)
        at com.test.ReportRunner.main(ReportRunner.Java:93)
Caused by: Java.lang.ClassNotFoundException: org.Apache.poi.ss.usermodel.Workbook
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:366)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:425)
        at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:358)
        ... 15 more
3
user1318369

このApache POI FAQ entry のように、異なるバージョン間でPOI jarを混合することはサポートされていません)。あなたが見つけたもののような、ある種の方法。それをしないでください!

すべて同じリリースのPOIjarを使用する必要があります。私は提案します 最新バージョン、ここで入手可能 (現在3.15)

コンポーネントとその依存関係のページ も確認して、ApachePOIの使用に必要なすべてのjarファイルがあることを確認する必要があります。または、MavenやGradleなどの依存関係管理ツールを使用してそれを処理してください!

5
Gagravarr

最新のApachePOIバイナリv3.17をダウンロードしました ここ そしてxlsxファイルを作成して大騒ぎせずに開くために必要なすべてのjarファイルがあります。

必要なjarファイルを以下のスクリーンショットに示します(選択したjarファイルを参照)。

Main Jars

Supported Jars

Supported Jars

2
mannedear

Apache poiが機能するには、互換性のあるjarが必要です。私はこれらの瓶を使用しました

      <dependency>
             <groupId>org.Apache.poi</groupId>
             <artifactId>poi</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.Apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.Apache.poi</groupId>
             <artifactId>poi-ooxml-schemas</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.Apache.poi</groupId>
             <artifactId>poi-scratchpad</artifactId>
             <version>3.9</version>
      </dependency>
      <dependency>
             <groupId>org.Apache.poi</groupId>
             <artifactId>ooxml-schemas</artifactId>
             <version>1.1</version>
      </dependency>
      <dependency>
             <groupId>org.Apache.poi</groupId>
             <artifactId>openxml4j</artifactId>
             <version>1.0-beta</version>
      </dependency>
0
user1416932

poi 2.5.1には、そのようなパッケージ(およびその結果としてクラス)が含まれていませんでした(jarファイルは本質的にZipアーカイブであるため、解凍することで確認できます)。 ソース を参照してください。

Poiの依存関係をリリース3に更新します。これには、ooxmlのバージョンと一致するという追加の利点もあります。

0
Ivan