web-dev-qa-db-ja.com

Eclipseの場合と同じようにIntelliJで実行可能なJARを作成するにはどうすればよいですか

Eclipseを使用して多くのライブラリを備えたプロジェクトから実行可能なJARを作成するプロセスはこれまで行われました。

エクスポート>実行可能なJAR>起動設定の選択>必要なライブラリを生成されたJARにパッケージ化する>完了

これにより、エクスポート先に単一のJARが作成され、サーバーにFTPで転送されて正常に実行されます。

最近さまざまな理由でIntelliJに切り替えましたが、一時的にEclipseに戻ることを余儀なくされるJARのビルドを除いて、すべてのケースで改善されました。

IntelliJ Iの場合:

[プロジェクト構造]> [アーティファクト]を開き、依存関係のあるモジュールから新しいJARを作成します。次に、JARの名前、その中のMETA-INF、およびExtracted <lib.jar/>形式のすべてのライブラリを含む出力レイアウトを作成します(このVPNでスクリーンショットをアップロードできないのでごめんなさい)。

アーティファクト(約15MB大きい)をビルドし、サーバーにFTPで送信し、実行しようとするとエラーが発生します。

Exception in thread "main" Java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

Eclipseでどのように模倣するのですか?

編集

作成される2つのJARは大きく異なります。

Eclipseが作成する有効なjarは次のようになります。 Good jar

一方、無効な.JARは次のようになります。 Bad jar

27
Nanor

あなたは2つの問題に直面しています。1つは重大と思われ、もう1つは軽微です。

  • メジャー:署名の例外
  • マイナー:jarのサイズは、Eclipseで作成されたjarより15 MB大きくなります。

両方の問題の解決策は、アーティファクトの構築方法にあります。まず、すべてのextracted *.jarを削除してから、図に示すように、使用可能な要素パンからすべてのjarを追加します。

Dependencies screenshot

パッケージ化された(圧縮された)jarファイルのみを追加すると、サイズが小さくなることは明らかです。ただし、署名の問題も解決します。詳細については、この 記事 をご覧ください。 1行だけ引用します。

公式のjarをそのままにして、依存関係としてマニフェストファイルに追加するのがおそらく最善です......

いくつかの依存関係が署名されており、再パッケージングがプロジェクトのMETA-INFを台無しにしているようです。

13
user2241537

Mavenを使用している場合、META-INFの代わりに/main/resourcesフォルダーをmain/Javaフォルダーの下に配置する必要があります。

参照: Intellij-Nikolay Chashnikov

その後、Java -jar filename.jarを使用して、実行可能なjarを通常どおり実行できます。

4
another

次の手順を実行できます。

1)ファイル->プロジェクト構造->プロジェクト設定->アーティファクト-> Jar->依存関係のあるモジュールから

2)[プロジェクトビルドに含める]チェックボックスをオンにします。

3)モジュールを右クリック->モジュール 'ModuleName'をビルド

2
Kirill