Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JDK1.8+JasperReports6.17.0のNoClassDefFoundError実行時エラーの件

お世話になります。
JDK1.8+JasperReports6.17.0で開発を行っているものです。

Eclipseで以下のjarをビルドパスに追加することでビルドは通るようになりました。
※マーケットプレイスもインストールしました。
jasperreports-metadata-6.16.0.jar
jasperreports-6.16.0.jar
jasperreports-chart-customizers-6.16.0.jar
jasperreports-chart-themes-6.16.0.jar
jasperreports-fonts-6.16.0.jar
jasperreports-functions-6.16.0.jar

しかし、以下の実行エラーが発生します。
?java.lang.NoClassDefFoundError: net/sf/jasperreports/export/SimplePrintServiceExporterConfiguration

調べたところ、
JAVA_HOMEへ必要なJarをすべて配置すれば実行できるようになるらしいと
以下に上記のjasper関連のjar6個を追加しました。
C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext

再び、実行すると、別のエラーが発生しました。
?java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
commons-logging-1.2.jarをダウンロードしてきて、同様に以下に格納しました。
C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext

再び、実行すると、また別のエラーが発生します。

?java.lang.NoClassDefFoundError: org/apache/commons/collections4/map/ReferenceMap
?java.lang.NoClassDefFoundError: org/apache/commons/digester/Rule

------------------------------

Eclipseで実行確認する場合は、Jarの追加だけでは実行エラーになるのでしょうか。
ビルドパスの依存関係、優先準備などの見直しが必要なのでしょうか。

依存関係のエラーのように感じるのですが、JasperReports6.17.0
C:\Program Files\Java\jdk1.8.0_291\jre\lib\extに手動で依存関係をしらべて
格納するしかないのでしょうか。

よろしくお願いします。

5

回答

75915

閲覧

5件の回答

評価

0

Eclipse上で実行する限りにおいては、プロジェクトのビルドパス設定は自動的に引き継がれるはず。
最初にエラーになったのは何かおかしいな。

配布元、あるいは親切な解説ページが依存しているライブラリの一覧を掲示してくれていることもあるけど、そうでなければ自分で解決するしかないね。

評価

0

返信ありがとうございます。

>Eclipse上で実行する限りにおいては、プロジェクトのビルドパス設定は自動的に引き継がれるはず。
>最初にエラーになったのは何かおかしいな。
そうですよね。
ビルドパスでjarを指定することで、ビルドは通り。
Eclipseで実行する場合は、実行構成でも指定が必要ですかね。
クラスパう、環境変数あたりどう設定するのが正しいのでしょうかね。。

評価

0

なお、書き方が中途半端だったが、「別のエラーが発生しました。」以降は正常。
ビルド時に責任を持つのはソースからの参照解決であって、ライブラリからの参照解決はその範囲外。
それが「配布元~」の意味。

評価

0

ビルド時の実行エラー色々試してみました。
ビルド構成は見直したのですが、実行構成を見直していませんでした。
こちらはこちらで別途設定が必要なのですね。

ただ、本題のJasperReports6.17.0のNoClassDefFoundError実行時エラーは解消できませんでした。
たびたび質問させていただき、大変重宝させていただいています。

(行ったこと)
JDK1.8でjasperreport6.17でライブラリを追加して実行しています。
jasperreport6.17はマーケットプレイスから取得しました。
コンパイルは通るのですが、実行すると以下のエラーが発生します。
java.lang.ClassNotFoundException: net.sf.jasperreports.export.ExporterInput
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)

ExporterInputは直接実コードから呼出てなく、JasperReportのライブラリが呼び出している際に実行時
エラーになっています。JasperReportに問合せなどできるものなのでしょうか。

実コードでは、以下参考に実装しています。
https://qiita.com/nakani1210/items/18b0e80317c35f6e6756

JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setExporterInput(new SimpleExporterInput(print));

お分かりになる方おりましたら、よろしくお願い致します。

評価

10

解決しました。ありがとうございます。
古いライブラリと競合していたようです。
WEB-INF\libの中身を整理して、
手動でライブラリをWEB-INF\libに配置して、ビルドパスを通すことでうまくいきました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。