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
このApache POI FAQ entry のように、異なるバージョン間でPOI jarを混合することはサポートされていません)。あなたが見つけたもののような、ある種の方法。それをしないでください!
すべて同じリリースのPOIjarを使用する必要があります。私は提案します 最新バージョン、ここで入手可能 (現在3.15)
コンポーネントとその依存関係のページ も確認して、ApachePOIの使用に必要なすべてのjarファイルがあることを確認する必要があります。または、MavenやGradleなどの依存関係管理ツールを使用してそれを処理してください!
最新のApachePOIバイナリv3.17をダウンロードしました ここ そしてxlsxファイルを作成して大騒ぎせずに開くために必要なすべてのjarファイルがあります。
必要なjarファイルを以下のスクリーンショットに示します(選択したjarファイルを参照)。
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>
poi 2.5.1には、そのようなパッケージ(およびその結果としてクラス)が含まれていませんでした(jarファイルは本質的にZipアーカイブであるため、解凍することで確認できます)。 ソース を参照してください。
Poiの依存関係をリリース3に更新します。これには、ooxmlのバージョンと一致するという追加の利点もあります。