2017-02-13 10 views
4

外部ライブラリをIntelliJ IDEAのプロジェクトに追加すると、アーティファクトをビルドするときにライブラリ内のクラスにアクセスできるようになりますか?IntelliJ IDEAのアーティファクトジャーナルに外部ライブラリを追加する

私はProject Structureから新しいJarアーティファクトを作成し、外部JARをライブラリに追加してからModules Listでチェックし、最終的にArtifactのOutputに追加しました。これらの作品はありません。私が構築し、自分のアプリケーションを実行しようとすると、エラーがスローされます。

Exception in thread "main" java.lang.NoClassDefFoundError: <path of the class trying to use>

何を私が行方不明ですか、私はこれは完全に間違っているのでしょうか?

答えて

6

あなたはここに2つのオプションがあります。アプリは、すべての依存関係

  • を持つ単一の実行可能jarファイルがManifest.MF経由依存jarファイルをリンクし、近くにそれらをコピーされるように

    • はアーティファクトジャーに依存関係を抽出しますアプリケーションのメインジャック

    私は両方のアプローチを示すサンプルプロジェクトを準備しました:HelloWithDependencies.zip

    アーチファクトは、out\singleout\linkedというディレクトリに生成されます。

    関連構成:

    single

    linked

  • +1

    あなたは私が25時間以上、多分2週間以上使った問題を解読しようとしました。どうもありがとうございました! また、これは動作しますが、その背後には何がありますか? IntelliJはMavenやAntなどを使用していますか? –

    +1

    Mavenに基づくプロジェクトを使用することはできますが、それはあなたの状況とは無関係です。プロジェクトに新しい依存関係を追加すると、既存のアーティファクトに自動的に追加されません。アーティファクト構成をもう一度見直して、アプリケーションを実行するために必要なすべての欠落したライブラリをjarから追加する必要があります。別の一般的な間違いは、別のjarファイルに1つのjarファイルを入れて、jarファイルをメインjarファイルの中に解凍するか、またはその近くにコピーして、マニフェスト経由でリンクすることです(manifestに新しいjarファイルを追加することを忘れないでください)。場合)。 – CrazyCoder

    +1

    Mavenベースのプロジェクトでは、Mavenプラグインを使用して依存関係を持つjarファイルを作成でき、IntelliJ IDEA成果物構成を使用する代わりにMavenゴールを実行して最終的な成果物を生成します。このようにして、 'pom 'に追加するすべての新しい依存関係。xml'はMavenが生成したjarファイルに自動的に表示されます。ほとんど同じことがGradleベースのプロジェクトにも当てはまります。 – CrazyCoder

    1

    アプリケーションをビルドするためにmavenを使用している場合、これは外部ライブラリを追加する正しい方法ではありません。あなたはどちらかを選択してください

    1. mvn install:install-file -Dfile=myJar.jar -DgroupId=com.yourproject -DartifactId=yourproject -Dversion={version} -Dpackaging=jarのようにライブラリをインストールしてください。
    2. hereのようにシステムパスを使用してください。

    オプション1は、プロジェクトにjarファイルを保存する必要がないためです。

    +0

    のMavenを使用している場合、私は実際に知りません。私はビルドファイルを作成していません。 IDEAの仕組みがわからないのですが、私の前提はビルドファイルが必要ないということでした。すべてMANIFEST.MFファイルがあります。 –

    関連する問題