1

この質問が多く寄せられているのを見てきましたが、まだ解決策がわかりません。私にとってはうまくいく解決策です。Apache POI を使用しているプロジェクトがあり、すべての外部 JAR を含めるようにしました。プロジェクトはEclipseでコンパイルして正常に実行されますが、「java -jar Test.jar」でjarを実行すると、次のエラーが発生します。

スレッド「メイン」の例外 java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Sheet

これが役立つ情報かどうかはわかりませんが、プロジェクト用に lib フォルダーを作成し、そこに poi ライブラリーを配置しました。これは、作成時に依存関係が JAR ファイルに含まれていることを意味します。外部 jar を実行可能 jar のすぐ隣に配置することについていくつかの解決策を見たので、これについて言及する必要があると考えました。また、クラスパスをプロジェクトのディレクトリに設定しようとしました。

私は何を間違っているようですか?

4

5 に答える 5

5

Apache POI JAR ファイルがランタイム クラスパスにありません。ファイルTest.jar内の次のマニフェスト エントリで再構築しますMANIFEST.MF

Class-Path: poi-3.9-20121203.jar
于 2013-07-10T21:33:41.277 に答える
0

私もこの問題を抱えていて、グーグルで検索しようとしました..

エラーログを読む必要があることがわかりました

ファイルを .xls に保存できないので、エラーを読んだ後、jar ファイルが見つからないことがわかりました。ireport の ext フォルダーにある jar ファイル poi-3.7-20101029 を追加しました。

ex.YourIReportFolder/ireport/modules/ext-poi.xx-xxxx

お役に立てれば :)

于 2015-06-20T04:01:40.630 に答える
0

Jar ファイルのマニフェスト ファイルにクラスパスを指定する必要があります。この公式ドキュメントを参照してください

MyJar.jar で使用するために、MyUtils.jar 内のクラスをクラス パスにロードします。これら 2 つの JAR ファイルは同じディレクトリにあります。

Manifest.txt最初に、次の内容で名前が付けられたテキスト ファイルを作成します。

Class-Path: MyUtils.jar
于 2013-07-10T21:33:17.540 に答える
0

最初に、ターゲット jar ( Test.jar) が必要なすべての依存関係を含むファット jar であるかどうかを確認します。

$ jar tf Test.jar

lib/必要なすべての依存関係 (Apache POI を含む) を含むフォルダーが表示されるはずです。その場合は、他の人が提案したことを行い、Apache POI を に追加しますMANIFEST.MF

あなたが提案したように、jarの依存関係を別のフォルダーに置くことについても可能です。lib/の外部のフォルダーに依存関係が保存されていると想像してくださいTest.jar。次のコマンドでコードを実行できます。

$ java -cp ".:lib/*" org.Test.Main

lib/ フォルダー内のすべての .jar をクラスパスに追加するだけです。この場合、メイン クラスの名前 (フル ネーム) も指定する必要があります。

于 2013-07-10T21:51:26.857 に答える