IntelliJからjarを適切に構築する方法は?


519

単一のモジュールといくつかの依存関係を含むプロジェクトがあります。コンパイルされたモジュールを含むjarを別のディレクトリに作成したいと思います。さらに、モジュールの横に依存関係が存在するようにしたいと思います。

IntelliJの「jarのビルド」プロセスをどのように変更しても、モジュールの出力は(META-INFファイルのほかに)空に表示されます。

回答:


602

IntelliJ 10でjarを作成する方法は次のとおりですhttp://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

File-> Project Structure-> Project Settings-> Artifacts->クリックgreen plus sign-> Jar->From modules with dependencies...

上記は、「スケルトン」をjarの保存先に設定します。実際にビルドして保存するには、次のようにします。

ターゲットJarに抽出します

OK

ビルド| アーティファクトを構築する| ビルド

から.jarファイルを抽出してみてください

ProjectName | アウト| アーティファクト| ProjectName_jar | ProjectName.jar


9
含まれているjarの一部のクラスがRSAで署名されていると失敗します。
Asif Shahzad 2012年

1
@AsifShahzadは、署名された依存関係を持つjarファイルを構築するためのこの回答を参照してください:stackoverflow.com/questions/41746177/…

5
このメソッドは依然として失敗し、jarファイルは実行されません
samuel owino

6
誰かが本当に動かないように一生懸命働いたようです。それはそれが機能することは決してないような残念です。私は少なくとも50の異なる答えを試しましたが、どれもうまくいきませんでした。そして、毎回同じ話です。現在、私は1週間だけをjarとして出力するように予約しています。これは、会社の全員が出力jarの作成に取り組む必要がある真の努力であると考えているためです。
恐ろしい

2
私の前に多くの人が書いたように、これは時々機能する単純化です。以下の@zsolt tolvaliの回答をご覧ください。IntelliJの観点からすると、新しいプロジェクトを作成するときに、JAR作成プロセスをデフォルトのアクティビティにするとよいでしょう。必要のない人がほとんどいないからです。
Etamar Laron、2018

256

これはまだ2017年の問題です。誰かの役に立てば幸いです。IntelliJ 2017.2で動作するjar-sを作成する2つの可能性を見つけました

1. IntelliJからアーティファクトを作成します。

  • プロジェクト構造に移動します。

ファイルメニュー

  • 新しいアーティファクトを作成します。

新しいアーティファクトを作成する

  • メインクラスを選択し、マニフェストフォルダーを必ず変更してください。

ここに画像の説明を入力してください

マニフェストディレクトリを変更する必要があります。

<project folder>\src\main\java 

「java」を「resources」に置き換えます

<project folder>\src\main\resources

これは次のようになります。

新しいマニフェストの正しい方法

  • 次に、jarにパックする依存関係を選択するか、jarファイルの近くに配置します

  • アーティファクトをビルドするには、アーティファクトをビルドし、「再構築」を選択します。jarファイルとその依存関係を含む「out」フォルダーが作成されます。

ここに画像の説明を入力してください

2. maven-assembly-pluginを使用する

ビルドセクションをpomファイルに追加する

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>ServiceCreate</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>com.svt.optimoo.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • 新しい実行/デバッグ構成を作成します。

新しい実行/デバッグ構成を作成します。

  • アプリケーションを選択:

アプリケーションを選択

  • 用紙に記入する
  • 最後に実行されるビルドの後に「assembly:single」mavenゴールを追加します

ここに画像の説明を入力してください

最終セットアップ

  • 保存して実行します

ここに画像の説明を入力してください

この手順により、「ターゲット」フォルダの下にjarファイルが作成されます

JARファイルの場所


7
マニフェストディレクトリをsrc / resourcesに変更することが重要です。感謝
〜–ファンタッチ

3
このマニフェストパスは最も重要なパスです。@ Zsolt Tolvalyに感謝します
fruqi

2
no main manifest attribute上記のソリューションを採用しました。誰もの変更について言及していませんpath to manifest。Thnx !!
プロメテウス

1
これが一番の答えになるはずです。ありがとう!
Giorgos Lamprakis

scalaのソースコードはどうですか?javaは私が使用しているものではありません
Kiwy

135

私は最近この問題を抱えており、以前の解決策やリンクに詳細が欠けている場合は、これらの手順に従うのは簡単だと思います。

.jarIntelliJ IDEA 14.1.5を使用してを作成する方法:

  1. ファイル>すべて保存。
  2. mainメソッドでドライバーまたはクラスを実行します。
  3. ファイル>プロジェクト構造。
  4. 「アーティファクト」タブを選択します。
  5. ウィンドウの上部近くにある緑色のプラスボタンをクリックします。
  6. [追加]ドロップダウンメニューから[JAR]を選択します。「依存関係のあるモジュールから」を選択します
  7. メインクラスを選択します。
  8. ラジオボタンは「ターゲットJARに抽出」を選択しているはずです。OKを押します。
  9. [ビルド時にビルド]チェックボックスをオンにします
  10. [適用]と[OK]を押します。
  11. メインメニューから、ビルドドロップダウンを選択します。
  12. [アーティファクトのビルド]オプションを選択します。

1
あなたは何かを逃しましたか?モジュールに関するオプションがあります。私の場合、JARを作成していますが、セキュリティ上のエラーによりJVMを作成しています。
sonus21 2015年

そのリストがすべてだと思います。セキュリティのためにJava設定で停止している可能性があります。他に誰かがこれについて考えていますか?
user5442490 2015

同じようにして、エラーが発生しました:このjarファイルを実行すると、メインクラスJavaFundamentals.jarが見つからなかったか、ロードできませんでした。ここで説明:stackoverflow.com/questions/40636790/...
laggerok19

jarを作成するたびに、この12ステップのプロセスを実行する必要がありますか、それともIntelliJがこれらのアクションを記憶して、ショートカットを使用できるようにしますか?
アンディ

31

私のように画像から利益を得る人のために:

File -> Project Structure

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください


4
@samuelowino言ってくれてありがとう。「まったく機能しない」ことを説明します。
Crt

1
ちょっと@Crt私は右のjarファイルをチェックしていませんでした、どうやら、Intelijiは異なるディレクトリ、謝罪、私の悪い、あなたのソリューションの作品、おかげ上の2つのjarファイル作成
owinoサミュエル

15

以下は、Mavenプロジェクトの2つの例です。

方法1:mavenとpom.xmlを使用してjarをビルドする

  1. ファイル、新規、プロジェクト、Maven
  2. パッケージを作成し、そのパッケージ内にJavaプログラムを作成します ここに画像の説明を入力してください
  3. pom.xmlで、maven-jar-pluginを追加します。

        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>somePackage.sample</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

画面キャプチャ: ここに画像の説明を入力してください 4.検索アイコンをクリックしてmavenプロジェクトボックスを開き、mavenと入力します。 ここに画像の説明を入力してください

  1. クリーンをクリックし、インストールをクリックします ここに画像の説明を入力してください

  2. あなたのjarファイルはターゲットフォルダ内に表示されます ここに画像の説明を入力してください

  3. java -jarを使用してjarをテストします

ここに画像の説明を入力してください

方法2:pom.xmlを変更せずにmavenでjarをビルドする

  1. ファイル、新規、プロジェクト、Maven
  2. パッケージを作成し、そのパッケージ内にJavaプログラムを作成します(上記と同じ)。
  3. File-> Project Structure-> Project Settings-> Artifacts->クリックgreen plus sign-> Jar->From modules with dependencies

とても重要です!

MANIFEST.MFはリソースフォルダーにあり、Main.Classは{package}-{class-name-that-c​​ontains-main-class}を参照する必要があります

ここに画像の説明を入力してください ここに画像の説明を入力してください

  1. 次に、メニューのビルドをクリックし、アーティファクトをビルドし、ビルドします

ここに画像の説明を入力してください

  1. outフォルダーでjarを見つけます

ここに画像の説明を入力してください

  1. それを実行します :)

ここに画像の説明を入力してください


これは機能します。MANIFEST.MFをそのディレクトリに置く必要がある理由を説明できますか?
Ubeogesh

これは私に役立ちます
Devendra Singraul

5

おそらく少し遅れますが、私はこの方法で解決できました-> winrarで開き、META-INFフォルダのECLIPSEF.RSAとECLIPSEF.SFを削除し、さらに "Main-class:main_class_name"( ".class"なし) )MANIFEST.MF内。最後の行の後で「Enter」を2回押したことを確認してください。そうしないと機能しません。


署名の依存関係のため、この回答を見てください。stackoverflow.com/questions/41746177/...

なんと異常な問題でしょう。なぜこれが起こるのか、またはどのように修正するのですか?これはハッキーな感じです
Andrew No

5

これらのソリューションを使用するとこのエラーが発生します:

java -jar xxxxx.jar

xxxxx.jarにメインマニフェスト属性がありません

そして解決策は

マニフェストディレクトリを変更する必要があります。

<project folder>\src\main\java 

Javaをリソースに変更する

<project folder>\src\main\resources

やっと、ついに、先端をありがとう!
rendon

@rendon頑張ってね!
サイード

パーフェクト!これは正常に機能します
jafarmlp

2

マルチモジュールのKotlinアプリからjarをビルドしようとしていて、悪名高い「メインマニフェスト属性がありません」エラーが発生していました。のマニフェストディレクトリの作成src/main/resourcesも機能しませんでした。

代わりに、src直接作成するときに機能しますsrc/META-INF/MANIFEST.MF

ここに画像の説明を入力してください


こんにちは、ありがとうございます。しかし、「java.desktop / javax.swing.ImageIcon java.lang.NullPointerException」というリソースが見つからないという新しいエラーが発生しました
Shivam Mathur

2

ここに画像の説明を入力してください

上記の人々が言うように、私は1つの点に注意しなければなりません。チェックボックスをチェックする必要があります:

プロジェクトのビルドに含める


1

アイデア8.1.3

「出力」ディレクトリ(project / out / production //)にコンパイルされた出力があるため、Jarは問題ありません。

jarをビルドする前に 'make'を実行する必要があると思います

依存関係については、「ライブラリを表示」をチェックして、必要なものを選択してください。


1

Mavenでは、このプラグインを使用できます。

 <build>
    <plugins>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>[path you class main]</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase> 
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

0

Maven(http://maven.apache.org)をご覧ください。これをアプリケーションのメインビルドプロセスとして使用することも、[構成の編集]ダイアログで特定のタスクを実行するためだけに使用することもできます。Maven内でモジュールのJARを作成するプロセスは、自明なJARにすべての依存関係を含めたい場合は、かなり簡単です。

これまでにMavenを使用したことがない場合は、Better Builds With Mavenをお読みください。


8
Mavenは明らかに、jarの作成などの単純なタスクのオーバーヘッドです。多分Antですが、確かにmavenではありません。
ジュリー

リンクが死んでいる(2014年10月)
KathyA。

1
@KathyA。ありがとう-Mavenチームの推奨事項を使用するように更新されました。
Gary Rowe 2014年

5
些細な場合は、答えに含めてみませんか?
nuzzolilo 2015年

1
読者がサイトにアクセスして学習プロセスを開始してくれることを望んでいるからです。
Gary Rowe

0

プロジェクトでサードパーティのライブラリを使用している場合、またはMANIFEST.MFファイルを正しく作成できない場合は、次を使用して生成されたJARファイルを実行すると競合が発生する可能性があります。

File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....

上記の方法。

代わりに、空のJARを作成し、他のすべての要素を出力ルートに手動で追加することをお勧めします。この方法についての素晴らしいブログ記事はここにあります:http : //karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/私はそこに記載されている手順を試しましたが、すべてうまくいきました私のために!


おかげで、これは私を助けました!「その他」の代わりに「JAR」をアーティファクトタイプとして選択した場合、プロジェクトのマニフェストがデフォルトのマニフェストによってJARで上書きされるIntellijにバグがあるようです。
赤の

0

IntelliJ IDEAプロジェクトをMavenプロジェクトから再インポートするとすぐに、他のいくつかの回答は役に立たなくなります。すべての変更は失われます。

jarのビルドは、プロジェクトの設定ではなく、実行/デバッグ構成によってトリガーされる必要があります。

Jetbrainsには、ここでこれをどのように達成できるかについての良い説明があります。

https://www.jetbrains.com/help/idea/maven.html

「Mavenゴールのトリガーの設定」というセクションまでスクロールします。

(彼らの説明の唯一の欠点は、スクリーンショットが超素晴らしいダルキュラのテーマではなく、デフォルトの黒地に白の配色であることです。うーん!)

つまり、基本的には、「Mavenプロジェクト」パネルを開いて、目的のプロジェクト(この場合はjarを構築するプロジェクト)を見つけ、その下に実行するmaven目標を見つけます。 、(通常は「パッケージ」の目標はjarを作成します)、その上でコンテキストメニューを開き(Windowsマシンを右クリック)、[実行/デバッグの前に実行...]オプションを使用できます。選択すると、そこから手で移動します。本当に簡単です。


0

kotlinでjarを作成しようとしている場合は、src/main/javaフォルダーを作成し、このフォルダーをMETA-INFフォルダーの場所として使用する必要があります。


0

IntelliJ IDEA 2018.3 Helpの公式回答は次のとおりです。私が試してみましたが、うまくいきました。

モジュールからJARファイルを構築するには、

  1. メインメニューで[ビルド]を選択します。アーティファクトを作成します。

  2. ドロップダウンリストから、JARタイプの目的のアーティファクトを選択します。 リストには、現在のプロジェクトに構成されているすべてのアーティファクトが表示されます。すべての構成済み成果物をビルドするには、「すべての成果物をビルド」オプションを選択します。


0

私の問題はこれでした:私はIntellij IDEA(異なるバージョンを試しました)+ Gradleを使用しました。上記の応答に示されているように、プロジェクトをコンパイルしてartifacf jarをビルドすると、「メインのマニフェスト属性がありません...」というエラーが表示されました。

この解決策は私にとってうまくいきました(特にチップについてはThilina Ashen Gamage(上記を参照)に感謝します):

抜粋-外部ライブラリを使用し、プロジェクト設定-アーティファクト-追加(+)-JAR-依存関係のあるモジュールからプロジェクトをビルドする場合、おそらくプログラムのバグが原因で、MANIFEST_MFファイルを含むMETA-INFフォルダーがjarに含まれていません。それを避けるために EMPTY jarファイルをます。

プロジェクト設定-アーティファクト-追加(+)-JAR-空のJAR。META-INFフォルダーがリソースフォルダーに追加されます。次に、メインクラスを選択します。次のjar構造が表示され META-INFフォルダーの存在に注意してください ます。META-INFフォルダーの存在に注意してください。プロジェクトをビルドしてアーティファクトをビルドできます。このソリューションは、javaFXアプリケーションでも機能しました。


-1

spring / mvnプロジェクトで作業している場合は、次のコマンドを使用できます。

mvn package -DskipTests

jarファイルはターゲットディレクトリに保存されます。


-3

AntとMavenは広く使用されています。私はAntを好む、私はそれがより軽量で、あなたが開発者がより制御していると感じています。それが欠点だと示唆する人もいます:-)


3
これは、エラーが発生している理由を説明するものではありません。
baordog 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.