ホームページ >Java >&#&チュートリアル >コマンドラインから Maven プロジェクトを実行するときに NoClassDefFoundError を解決する方法は?
Maven の依存関係の問題: NoClassDefFoundError について
Maven をプロジェクトに統合する場合、開発者はアプリケーションを実行しようとすると NoClassDefFoundError が発生する可能性があります。コマンドライン。この問題は、生成された JAR ファイル内の依存関係を自動的にパッケージ化しない Maven のデフォルトの動作が原因で発生します。
根本原因
NoClassDefFoundError は、Java仮想マシン (JVM) はアプリケーションのコードを実行しようとしますが、必要なライブラリの依存関係のクラスを見つけることができません。これらのクラスは、手動または自動で決定された、指定されたクラスパス上には見つかりません。
Maven のデフォルトの動作
仕様上、Maven はプロジェクトの依存関係が次の場所で利用可能であると想定しています。システム全体のクラスパス、またはビルド プロセス中に使用される Maven リポジトリ内。ただし、コマンド ラインからアプリケーションを実行する場合、これらの依存関係はデフォルトでは利用できない場合があります。
解決策: 依存関係のシェーディング
この問題を解決するには、開発者は依存関係をシェーディングできます。ライブラリ コードを出力 JAR ファイルに追加します。これは、必要なすべてのライブラリを単一の JAR 内にバンドルできる効果的なアプローチです。
Maven Shade Plugin の使用
依存関係シェーディングを実現するために、開発者はmaven-shade-plugin を Maven プロジェクトに追加します。このプラグインは、プロジェクトのクラスと依存関係の両方をパッケージ化する「uber-JAR」を生成する簡単な構成プロセスを提供します。
<code class="xml"><project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project></code>
コマンドの再実行
シェード プラグインが設定されて実行されると、開発者はコマンドを再実行してアプリケーションをビルドして実行できます。結果として得られる JAR には、必要な依存関係がすべて含まれ、NoClassDefFoundError が排除されます。
追加構成
maven-shade-plugin は、シェーディング プロセスをさらに調整するための追加の構成オプションを提供します。開発者は、含める JAR を指定したり、JAR ファイルの Main-Class を定義したりすることができます。包括的なドキュメントは、プラグインの Web サイトで入手できます。
以上がコマンドラインから Maven プロジェクトを実行するときに NoClassDefFoundError を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。