Bagaimana cara membuat toples dari IntelliJ dengan benar?

519

Saya punya proyek yang berisi modul tunggal, dan beberapa dependensi. Saya ingin membuat toples, di direktori terpisah, yang berisi modul yang dikompilasi. Selain itu, saya ingin agar dependensi hadir di sebelah modul saya.

Tidak peduli bagaimana saya memutar proses "build jar" IntelliJ, output modul saya tampak kosong (selain file META-INF).

ripper234
sumber

Jawaban:

603

Inilah cara membuat toples dengan IntelliJ 10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

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

Di atas menetapkan "kerangka" ke tempat tabung akan disimpan. Untuk benar-benar membangun dan menyimpannya lakukan hal berikut:

Ekstrak ke Jar target

baik

Bangun | Bangun Artefak | Membangun

Coba Ekstrak file .jar dari

Nama Proyek | keluar | artefak | ProjectName_jar | ProjectName.jar

EpicPandaForce
sumber
9
Gagal saat beberapa kelas dalam toples Anda yang disertakan ditandatangani dengan RSA.
Asif Shahzad
1
@ AsifShahzad melihat jawaban ini untuk membuat file jar dengan dependensi yang telah ditandatangani: stackoverflow.com/questions/41746177/… .
5
Metode ini masih gagal, file jar tidak dapat dijalankan
samuel owino
6
Tampaknya seseorang telah bekerja sangat keras untuk tidak membuatnya bekerja. Sayang sekali tidak pernah berhasil. Saya telah mencoba setidaknya 50 jawaban berbeda dan tidak ada yang berhasil. Dan itu adalah cerita yang sama setiap saat. Sekarang saya memesan satu minggu untuk hanya mengeluarkannya sebagai toples karena semua orang di perusahaan kami menganggapnya sebagai upaya tulus yang perlu dilakukan dalam memproduksi toples.
Luar biasa
2
Seperti yang ditulis banyak orang sebelum saya, ini adalah penyederhanaan yang kadang berhasil. Silakan lihat jawaban @zsolt tolvali di bawah ini. Akan bagus dari perspektif IntelliJ untuk menjadikan proses pembuatan JAR sebagai AKTIVITAS DEFAULT ketika membuat proyek baru, karena sangat sedikit orang yang tidak membutuhkannya!
Etamar Laron
256

Ini masih menjadi masalah di tahun 2017, saya harap ini akan membantu seseorang di luar sana! Saya menemukan 2 kemungkinan untuk membuat stoples yang berfungsi di bawah IntelliJ 2017.2

1. Membuat artefak dari IntelliJ:

  • Buka struktur proyek:

Menu file

  • Buat artefak baru:

Buat artefak baru

  • Pilih kelas utama, dan pastikan untuk mengubah folder manifes:

masukkan deskripsi gambar di sini

Anda harus mengubah direktori manifes:

<project folder>\src\main\java 

ganti "java" dengan "resources"

<project folder>\src\main\resources

Begini tampilannya:

cara yang benar untuk manifes baru

  • Kemudian Anda memilih dependensi apa yang ingin Anda kemas DI jar Anda, atau DEKAT file jar Anda

  • Untuk membangun artefak Anda pergi untuk membangun artefak dan pilih "membangun kembali". Ini akan membuat folder "keluar" dengan file jar Anda dan dependensinya.

masukkan deskripsi gambar di sini

2. Menggunakan maven-assembly-plugin

Tambahkan bagian build ke file 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>
  • Buat konfigurasi jalankan / debug baru:

Buat konfigurasi jalankan / debug baru:

  • Pilih aplikasi:

Pilih aplikasi

  • Isi formulir
  • Tambahkan target maven "assembly: single" setelah build untuk dieksekusi terakhir

masukkan deskripsi gambar di sini

Pengaturan akhir

  • Simpan, lalu jalankan

masukkan deskripsi gambar di sini

Prosedur ini akan membuat file jar di bawah folder "target"

Lokasi file JAR

Zsolt Tolvaly
sumber
7
ubah direktori manifes menjadi src / resources adalah titik kunci !!! terima kasih ~
fantouch
3
Jalur MANIFEST ini adalah yang paling kritis, terima kasih @Zsolt Tolvaly
fruqi
2
Saya mulai no main manifest attributemengadopsi solusi di atas. Tidak ada yang menyebutkan mengubah path to manifest. Thnx !!
Prometheus
1
ini harus menjadi jawaban teratas. Terima kasih!
Giorgos Lamprakis
bagaimana dengan kode sumber di scala? java bukan apa yang saya gunakan
Kiwy
135

Baru-baru ini saya mengalami masalah ini dan berpikir langkah-langkah ini mudah diikuti jika ada solusi atau tautan sebelumnya yang hilang detail.

Cara membuat .jarIntelliJ IDEA 14.1.5 menggunakan:

  1. File> Simpan Semua.
  2. Jalankan driver atau kelas dengan metode utama.
  3. File> Struktur Proyek.
  4. Pilih Tab "Artefak".
  5. Klik tombol tambah hijau di dekat bagian atas jendela.
  6. Pilih JAR dari Add drop down menu. Pilih "Dari modul dengan dependensi"
  7. Pilih kelas utama.
  8. Tombol radio harus memilih "ekstrak ke target JAR." Tekan OK.
  9. Centang kotak "Build on make"
  10. Tekan apply dan OK.
  11. Dari menu utama, pilih dropdown build.
  12. Pilih opsi bangun artefak.
pengguna5442490
sumber
1
apakah kamu melewatkan sesuatu? Ada opsi tentang modul apa yang seharusnya. Dalam kasus saya itu membuat JAR tetapi JVM melalui kesalahan karena keamanan.
sonus21
Saya pikir daftar itu adalah segalanya. Anda mungkin memiliki sesuatu dengan pengaturan java Anda menghentikannya karena keamanan. Apakah ada orang lain yang memikirkan hal ini?
user5442490
Diikuti sama dan saya memiliki Kesalahan: Tidak dapat menemukan atau memuat JavaFundamentals.jar kelas utama saat menjalankan file jar ini. Dijelaskan di sini: stackoverflow.com/questions/40636790/…
laggerok19
Apakah proses 12 langkah ini harus diambil setiap kali saya ingin membuat toples, atau akankah IntelliJ mengingat tindakan ini sehingga Anda dapat menggunakan pintasan untuk itu?
Andy
31

Bagi mereka yang mendapat manfaat dari gambar seperti yang saya lakukan:

File -> Project Structure

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Crt
sumber
4
@samuelowino saya tidak menghargai Anda mengatakan itu. Jelaskan apa yang "tidak berhasil sama sekali".
Crt
1
Hei @Crt Saya tidak memeriksa file jar yang tepat, tampaknya, Inteliji menghasilkan dua file jar pada direktori yang berbeda, permintaan maaf, masalah saya, solusi Anda berhasil, terima kasih
samuel owino
15

Berikut adalah 2 contoh dengan proyek pakar, langkah demi langkah:

Metode 1: Buat toples dengan maven dan pom.xml

  1. File, baru, proyek, pakar
  2. buat paket, buat program java di dalam paket itu masukkan deskripsi gambar di sini
  3. di pom.xml, tambahkan 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>

tangkapan layar: masukkan deskripsi gambar di sini 4. buka kotak proyek pakar dengan mengklik ikon pencarian dan ketik pakar, masukkan deskripsi gambar di sini

  1. klik bersih, lalu klik instal masukkan deskripsi gambar di sini

  2. file jar Anda akan muncul di dalam folder target masukkan deskripsi gambar di sini

  3. uji toples Anda menggunakan java -jar

masukkan deskripsi gambar di sini

Metode 2: Buat toples dengan pakar tanpa perubahan pom.xml

  1. File, baru, proyek, pakar
  2. buat paket, buat program java di dalam paket itu (sama seperti di atas)
  3. File-> Project Structure-> Project Settings-> Artifacts-> Klik green plus sign-> Jar->From modules with dependencies

Sangat penting!

MANIFEST.MF perlu berada di folder sumber daya Anda dan Main.Class perlu merujuk ke {package} - {class-name-that-berisi-main-class}

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

  1. kemudian klik membangun menu, buat artefak, bangun

masukkan deskripsi gambar di sini

  1. temukan toples di folder keluar

masukkan deskripsi gambar di sini

  1. menjalankannya :)

masukkan deskripsi gambar di sini

rrr
sumber
ini bekerja. Bisakah Anda menjelaskan mengapa MANIFEST.MF perlu berada di direktori itu?
Ubeogesh
Ini membantu saya
Devendra Singraul
5

Mungkin agak terlambat, tapi saya berhasil menyelesaikannya dengan cara ini -> buka dengan winrar dan hapus ECLIPSEF.RSA dan ECLIPSEF.SF di folder META-INF, terlebih lagi masukkan "Kelas-utama: main_class_name" (tanpa ".class" ) di MANIFEST.MF. Pastikan Anda menekan "Enter" dua kali setelah baris terakhir, jika tidak maka tidak akan berfungsi.

Baka
sumber
Untuk dependensi yang ditandatangani, silakan lihat jawaban ini: stackoverflow.com/questions/41746177/…
Masalah yang gila. Adakah yang tahu mengapa ini terjadi atau bagaimana cara memperbaikinya? Ini terasa berantakan
Andrew No
5

Ketika saya menggunakan solusi ini kesalahan ini datang:

java -jar xxxxx.jar

tidak ada atribut manifes utama, di xxxxx.jar

dan solusinya adalah :

Anda harus mengubah direktori manifes:

<project folder>\src\main\java 

ubah java menjadi sumber daya

<project folder>\src\main\resources
Saeed
sumber
Wah, akhirnya, terima kasih atas tipnya!
rendon
@rendon Semoga berhasil wah!
Saeed
Sempurna! Ini berfungsi dengan baik
jafarmlp
2

Saya mencoba membuat toples dari aplikasi Kotlin multi-modul dan mendapatkan kesalahan 'tidak ada atribut manifes utama' yang terkenal. Membuat direktori manifes di src/main/resourcestidak berhasil.

Sebaliknya, ia bekerja saat membuat dalam srclangsung: src/META-INF/MANIFEST.MF.

masukkan deskripsi gambar di sini

Tobias Uhmann
sumber
Hai, Terima kasih itu berfungsi dengan baik. Tapi sekarang saya memiliki kesalahan baru bahwa itu tidak menemukan sumber daya "java.desktop / javax.swing.ImageIcon java.lang.NullPointerException"
Shivam Mathur
2

masukkan deskripsi gambar di sini

Seperti yang dikatakan orang-orang di atas, tetapi saya harus mencatat satu poin. Anda harus mencentang kotak centang:

Termasuk dalam membangun proyek

Benchur Wong
sumber
1

Ide 8.1.3

Jar ok, karena ada output yang dikompilasi di direktori 'output' (proyek / keluar / produksi //)

Saya kira, Anda harus menjalankan 'make' sebelum membuat toples

untuk dependensi cukup periksa "tunjukkan perpustakaan" dan pilih yang Anda inginkan.

Vugluskr
sumber
1

Dengan Maven Anda dapat menggunakan plugin ini:

 <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>
fede beron
sumber
0

Anda mungkin ingin melihat Maven ( http://maven.apache.org ). Anda dapat menggunakannya baik sebagai proses pembuatan utama untuk aplikasi Anda, atau hanya untuk melakukan tugas-tugas tertentu melalui dialog Edit Konfigurasi. Proses membuat JAR modul dalam Maven cukup sepele, jika Anda ingin menyertakan semua dependensi dalam JAR yang dapat dieksekusi sendiri yang juga sepele.

Jika Anda belum pernah menggunakan Maven sebelumnya maka Anda ingin membaca Better Builds With Maven .

Gary Rowe
sumber
8
Maven jelas overhead untuk tugas-tugas sederhana seperti membuat toples. Mungkin semut tapi tidak pakar.
Juriy
Tautan sudah mati (Okt 2014)
KathyA.
1
@KathyA. Terima kasih - diperbarui untuk menggunakan rekomendasi tim Maven.
Gary Rowe
5
Jika itu sangat sepele, mengapa tidak memasukkannya ke dalam jawaban Anda?
nuzzolilo
1
Karena saya ingin pembaca mengunjungi situs dan memulai proses pembelajaran.
Gary Rowe
0

Jika Anda menggunakan perpustakaan pihak ketiga dengan proyek Anda atau jika Anda memiliki masalah dengan membuat file MANIFEST.MF dengan benar, mungkin ada konflik ketika menjalankan file JAR yang dihasilkan menggunakan

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

metode yang disebutkan di atas.

Sebagai gantinya saya menyarankan Anda untuk membuat JAR kosong dan menambahkan semua elemen lain ke output root secara manual. Artikel blog yang luar biasa untuk metode ini dapat ditemukan di sini: http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ Saya mencoba langkah-langkah yang disebutkan di sana dan semuanya bekerja dengan baik untuk saya!

Thilina Ashen Gamage
sumber
Terima kasih, ini membantu saya! Tampaknya ada bug di Intellij di mana manifes proyek ditimpa di JAR oleh manifes default jika Anda memilih "JAR" sebagai jenis artefak alih-alih "Lainnya".
merah
0

Beberapa jawaban lain tidak berguna karena segera setelah Anda mengimpor kembali proyek IntelliJ IDEA dari proyek pakar, semua perubahan akan hilang.

Pembuatan toples perlu dipicu oleh konfigurasi jalankan / debug, bukan oleh pengaturan proyek.

Jetbrains memiliki deskripsi yang bagus tentang bagaimana Anda dapat mencapai ini di sini:

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

Gulir ke bawah ke bagian yang disebut "Mengkonfigurasi pemicu untuk tujuan Maven".

(Satu-satunya kelemahan dari deskripsi mereka adalah tangkapan layar mereka berada dalam skema warna hitam-putih standar, alih-alih tema darcula yang luar biasa. Ugh!)

Jadi, pada dasarnya, apa yang Anda lakukan adalah Anda membuka panel "Proyek Maven", Anda menemukan proyek yang menarik, (dalam kasus Anda, proyek yang membangun toples Anda,) di bawahnya Anda menemukan tujuan pakar yang ingin Anda jalankan , (biasanya tujuan "paket" membuat guci,) Anda membuka menu konteks di atasnya, (klik kanan pada mesin Windows,) dan akan ada opsi "Jalankan sebelum Jalankan / Debug ..." yang Anda bisa pilih dan itu akan membawamu dengan tangan dari sana. Sangat mudah.

Mike Nakis
sumber
0

Jika Anda mencoba membuat toples dengan kotlin, Anda perlu membuat src/main/javafolder dan menggunakan folder ini sebagai lokasi untuk folder META-INF.

Chris
sumber
0

Inilah jawaban resmi Bantuan IntelliJ IDEA 2018.3 . Saya mencoba dan itu berhasil.

Untuk membangun file JAR dari modul;

  1. Di menu utama, pilih Bangun | Bangun Artefak.

  2. Dari daftar tarik-turun, pilih artefak yang diinginkan dari tipe JAR. Daftar ini menunjukkan semua artefak yang dikonfigurasi untuk proyek saat ini. Untuk membuat semua artefak yang dikonfigurasi dibangun, pilih opsi Bangun semua artefak.

Sabri Meviş
sumber
0

Masalah saya adalah ini: Saya menggunakan Intellij IDEA (mencoba berbagai versi) + Gradle. Ketika saya menyusun proyek dan membuat toples artifacf, seperti yang ditunjukkan dalam respons di atas, saya menerima kesalahan - "tidak ada manifes attrubute utama ..."

Solusi ini bekerja untuk saya (terima kasih khusus untuk Thilina Ashen Gamage (lihat di atas) untuk tip):

Kutipan - jika Anda menggunakan perpustakaan eksternal dan membangun proyek melalui Pengaturan Proyek - Artefak - Tambah (+) - Jar - Dari modul dengan dependensi , maka mungkin karena bug program folder META-INF dengan file MANIFEST_MF tidak termasuk toples. Untuk menghindarinya buat file jar KOSONG .

Pengaturan Proyek - Artefak - Tambahkan (+) - Jar - JAR KOSONG . Folder META-INF akan ditambahkan ke folder sumber daya . Kemudian pilih kelas utama Anda. Anda akan melihat struktur tabung berikut: catat keberadaan folder META-INF Catat keberadaan folder META-INF Kemudian Anda dapat membangun proyek Anda dan membangun artefak. Solusi ini juga berfungsi untuk aplikasi javaFX.

Orkhan Hasanli
sumber
-1

Jika Anda sedang mengerjakan proyek spring / mvn, Anda dapat menggunakan perintah ini:

mvn package -DskipTests

File jar akan disimpan pada directoy target.

Hans Pour
sumber
-3

Semut dan Maven banyak digunakan. Saya lebih suka Ant, saya merasa lebih ringan dan Anda pengembang lebih memegang kendali. Beberapa akan menyarankan itu downside :-)

Brian
sumber
3
Ini tidak menjelaskan mengapa kesalahan terjadi.
baordog