IntelliJ'den kavanozlar nasıl düzgün bir şekilde inşa edilir?


519

Tek bir modül ve bazı bağımlılıklar içeren bir projem var. Derlenmiş modülü içeren ayrı bir dizinde bir kavanoz oluşturmak istiyorum. Ayrıca, modülümün yanında bağımlılıklar olmasını da istiyorum.

IntelliJ'in "build jar" işlemini nasıl bükersem fark etmez, modülümün çıktısı boş görünür (META-INF dosyasının yanında).

Yanıtlar:


602

IntelliJ 10 ile nasıl kavanoz yapılacağı http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

File-> Project Structure-> Project Settings-> Artifacts-> Tıklayın green plus sign-> Jar->From modules with dependencies...

Yukarıda kavanozun kaydedileceği "iskelet" ayarlanır. Aslında inşa etmek ve kaydetmek için aşağıdakileri yapın:

Hedef Kavanoza Ayıkla

tamam

Yapı | Yapı Yapısı | İnşa etmek

.Jar dosyasını

Proje Adı | dışarı | eserler | ProjeAdı_jar | ProjectName.jar


9
Dahil olan kavanozunuzdaki bazı sınıflar RSA ile imzalandığında başarısız olur.
Asif Shahzad

1
@AsifShahzad, imzalı bağımlılıklara sahip jar dosyaları oluşturmak için şu cevaba bakınız: stackoverflow.com/questions/41746177/… .

5
Bu yöntem hala başarısız, kavanoz dosyası yürütülmüyor
samuel owino

6
Görünüşe göre birisi işe yaramamak için gerçekten çok çalıştı. Asla işe yaramıyor gibi bir utanç. En az 50 farklı cevap denedim ve hiçbiri işe yaramadı. Ve her seferinde aynı hikaye. Şirketimizdeki herkesin bir çıktı kavanozu üretmek için gitmesi gereken gerçek bir çaba olduğunu düşündüğü için şimdi bir kavanoz olarak çıkarmak için bir hafta ayırıyorum.
Harika

2
Birçoğunun benden önce yazdığı gibi, bu bazen işe yarayan bir basitleştirme. Lütfen aşağıdaki @zsolt tolvali'nin cevabına bakınız. IntelliJ'in bakış açısına göre, yeni bir proje oluştururken JAR oluşturma sürecini VARSAYILAN BİR AKTİVİTE yapmak iyi olacaktır, çünkü çok az kişinin buna ihtiyacı yoktur!
Etamar Laron

256

Bu 2017'de hala bir sorun, umarım orada birine yardım eder! IntelliJ 2017.2 altında çalışma kavanozları oluşturmak için 2 olasılık buldum.

1. IntelliJ'den eser oluşturma:

  • Proje yapısına gidin:

Dosya menüsü

  • Yeni bir yapı oluşturun:

Yeni bir yapı oluşturun

  • Ana sınıfı seçin ve bildirim klasörünü değiştirdiğinizden emin olun:

resim açıklamasını buraya girin

Manifest dizinini değiştirmeniz gerekiyor:

<project folder>\src\main\java 

"java" yerine "kaynakları" kullanın

<project folder>\src\main\resources

Bu şekilde görünmelidir:

yeni manifest için doğru yol

  • Ardından kavanozunuza paketlenmesini istediğiniz bağımlılıkları seçin veya jar dosyanızın YAKININDA

  • Yapılarınızı oluşturmak için yapıları oluşturun ve "yeniden oluştur" u seçin. Jar dosyanız ve bağımlılıkları ile bir "out" klasörü oluşturur.

resim açıklamasını buraya girin

2. maven-montaj-eklentisini kullanma

Pom dosyasına derleme bölümü ekle

    <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>
  • Yeni bir çalıştırma / hata ayıklama yapılandırması oluşturun:

Yeni bir çalıştırma / hata ayıklama yapılandırması oluşturun:

  • Uygulama seçin:

Uygulama seçin

  • Formu doldurun
  • En son çalıştırılacak derlemeden sonra "assembly: single" maven hedefini ekleyin

resim açıklamasını buraya girin

Son kurulum

  • Kaydet, sonra çalıştır

resim açıklamasını buraya girin

Bu yordam jar dosyasını "target" klasörü altında oluşturur

JAR dosya konumu


6
manifest dizinini src / resources olarak değiştirmek anahtar noktadır !!! teşekkürler ~
fantouch

3
Bu MANIFEST yolu en kritik yoldur, teşekkürler @Zsolt Tolvaly
fruqi

2
Ben başlamıştı no main manifest attributeçözümleri üzerinde benimseyerek. Hiç kimse path to manifest. Thnx !!
Prometheus

1
bu en iyi cevap olmalı. Teşekkürler!
Giorgos Lamprakis

scala'da kaynak koduna ne dersiniz? java kullandığım değil
Kiwy

135

Son zamanlarda bu sorun vardı ve herhangi bir önceki çözüm veya bağlantı ayrıntı eksikse bu adımları takip etmek kolay düşünüyorum.

.jarIntelliJ IDEA 14.1.5 kullanarak nasıl oluşturulur :

  1. Dosya> Tümünü Kaydet.
  2. Sürücü veya sınıfı ana yöntemle çalıştırın.
  3. Dosya> Proje Yapısı.
  4. Sekme "Eserler" i seçin.
  5. Pencerenin üst tarafındaki yeşil artı düğmesini tıklayın.
  6. Ekle açılır menüsünden JAR'ı seçin. "Bağımlılığa sahip modüllerden" seçeneğini belirleyin
  7. Ana sınıfı seçin.
  8. Radyo düğmesi "hedef JAR'a çıkart" ı seçmelidir. Tamam tuşuna basın.
  9. "Build on make" kutusunu işaretleyin
  10. Uygula ve Tamam'a basın.
  11. Ana menüden derleme açılır menüsünü seçin.
  12. Yapı oluşturma seçeneğini seçin.

1
bir şey mi kaçırdın Modül hakkında ne olması gerektiği hakkında bir seçenek var. Benim durumumda güvenlik nedeniyle hata JAR ama JVM oluşturuyor.
sonus21

Bence bu liste her şey. Java ayarlarınızda güvenlik nedeniyle onu durduracak bir şey olabilir. Bu konuda başka kimsenin düşüncesi var mı?
user5442490

Aynı izledi ve hata var: Bu jar dosyasını çalıştırırken ana sınıf JavaFundamentals.jar bulunamadı veya yüklenemedi. Burada açıklanmıştır: stackoverflow.com/questions/40636790/…
laggerok19

Bu 12 adımlı işlemin her kavanoz oluşturmak istediğimde mi yapılması gerekiyor, yoksa IntelliJ bu eylemleri hatırlayacaktır, böylece bir kısayol kullanabilirsiniz.
Andy

31

Benim gibi görüntülerden faydalananlar için:

File -> Project Structure

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


4
@samuelowino bunu söylemeni takdir etmiyorum. Neyin "hiç işe yaramadığını" açıklayın.
Crt

1
Hey @Crt Birazdan kavanoz dosyayı kontrol değildi, görünüşe göre, Inteliji farklı dizinlere, özür, benim kötü, çözüm eserler, teşekkür üzerindeki iki kavanoz dosyaları üretti
owino Samuel

15

İşte maven projesi ile adım adım 2 örnek:

Yöntem 1: Maven ve pom.xml ile kavanoz oluşturun

  1. Dosya, yeni, proje, maven
  2. bir paket oluştur, bu paketin içinde bir java programı oluştur resim açıklamasını buraya girin
  3. pom.xml'de maven-jar-eklentisi ekleyin.

        <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>

ekran yakalama: resim açıklamasını buraya girin 4. arama simgesini tıklayarak maven proje kutusunu açın ve maven yazın, resim açıklamasını buraya girin

  1. temizle'yi ve ardından yükle'yi tıkla resim açıklamasını buraya girin

  2. jar dosyanız hedef klasörde görünecek resim açıklamasını buraya girin

  3. java -jar kullanarak kavanozunuzu test edin

resim açıklamasını buraya girin

Yöntem 2: Pom.xml değişikliği olmadan maven ile kavanoz oluşturun

  1. Dosya, yeni, proje, maven
  2. bir paket oluşturun, bu paketin içinde bir java programı oluşturun (yukarıdakiyle aynı)
  3. File-> Project Structure-> Project Settings-> Artifacts-> Tıklayın green plus sign-> Jar->From modules with dependencies

Çok önemli!

MANIFEST.MF'nin kaynaklar klasörünüzde olması ve Main.Class'ın {package} - {class-name-that-include-main-class} dizinine başvurması gerekir

resim açıklamasını buraya girin resim açıklamasını buraya girin

  1. sonra menüde oluştur'u tıklayın, eserler oluşturun,

resim açıklamasını buraya girin

  1. kavanozunu çıkış klasöründe bul

resim açıklamasını buraya girin

  1. koş :)

resim açıklamasını buraya girin


bu çalışıyor. MANIFEST.MF'nin neden bu dizinde olması gerektiğini açıklayabilir misiniz?
Ubeogesh

Bu bana yardımcı olur
Devendra Singraul

5

Muhtemelen biraz geç oldu, ama bunu bu şekilde çözmeyi başardım -> winrar ile açın ve ECLIPSEF.RSA ve ECLIPSEF.SF'yi META-INF klasöründe, ayrıca "Main-class: main_class_name" (".class" olmadan) ) MANIFEST.MF. Son satırdan sonra iki kez "Enter" tuşuna bastığınızdan emin olun, aksi takdirde çalışmaz.


İmzalı bağımlılıklar için lütfen şu cevaba bir göz atın: stackoverflow.com/questions/41746177/…

Ne çılgınca bir konu. Bunun neden olduğu veya nasıl düzeltileceği hakkında bir fikrin var mı? Bu kibirli hissediyor
Andrew No

5

Bu çözümü kullandığımda bu hata geliyor:

java -jar xxxxx.jar

ana bildirim özelliği yok, xxxxx.jar içinde

ve çözüm :

Manifest dizinini değiştirmeniz gerekiyor:

<project folder>\src\main\java 

java'yı kaynaklara değiştir

<project folder>\src\main\resources

Vay be, sonunda, bahşiş için teşekkürler!
rendon

@rendon İyi şanslar vay!
Saeed

Mükemmel !. Bu iyi çalışıyor
jafarmlp

2

Çok modüllü Kotlin uygulamasından bir kavanoz oluşturmaya çalışıyordum ve kötü şöhretli 'ana tezahür özelliği' hatası alıyordum. İçinde manifest dizini oluşturmak da src/main/resourcesişe yaramadı.

Bunu oluştururken Bunun yerine, çalışır srcdoğrudan: src/META-INF/MANIFEST.MF.

resim açıklamasını buraya girin


Merhaba, Teşekkürler iyi çalışıyor. Ama şimdi "java.desktop / javax.swing.ImageIcon java.lang.NullPointerException" kaynaklarını bulmadığı yeni bir hata var
Shivam Mathur

2

resim açıklamasını buraya girin

Yukarıdaki insanların söylediği gibi, ama bir noktayı not etmek zorundayım. Onay kutusunu işaretlemelisiniz:

Proje derlemesine dahil et


1

Fikir 8.1.3

Jar, 'output' dizininde derlenmiş çıktı olduğundan (project / out / production //)

Sanırım kavanoz inşa etmeden önce 'yapmak'

bağımlılıklar için "kitaplığı göster" i işaretleyin ve ne istediğinizi seçin.


1

Maven ile bu eklentiyi kullanabilirsiniz:

 <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'e ( http://maven.apache.org ) bir göz atmak isteyebilirsiniz . Uygulamanız için ana oluşturma işlemi olarak veya yalnızca Yapılandırmaları Düzenle iletişim kutusu aracılığıyla belirli görevleri gerçekleştirmek için kullanabilirsiniz. Maven içinde bir modülün JAR'ı oluşturma işlemi, önemsiz olan kendi kendine yürütülebilir bir JAR'a tüm bağımlılıkları dahil etmesini istiyorsanız oldukça önemsizdir.

Maven'i daha önce hiç kullanmadıysanız Better Maven ile Builds'ı okumak istersiniz .


8
Maven, kavanoz oluşturmak gibi basit görevler için açıkça yüklendi. Belki Ant ama kesin olarak maven değil.
Juriy

Bağlantı öldü (Ekim 2014)
KathyA.

1
@KathyA. Teşekkürler - Maven ekibinin önerilerini kullanmak için güncellendi.
Gary Rowe

5
Bu kadar önemsiz ise, neden cevabınıza dahil etmiyorsunuz?
nuzzolilo

1
Çünkü okuyucunun siteyi ziyaret etmesini ve öğrenme sürecine başlamasını istiyorum.
Gary Rowe

0

Projenizle üçüncü taraf kitaplıkları kullanıyorsanız veya MANIFEST.MF dosyasını düzgün bir şekilde oluşturma konusunda sorun yaşıyorsanız, kullanılarak oluşturulan JAR dosyalarını çalıştırırken çakışmalar olabilir

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

yukarıda belirtilen yöntem.

Bunun yerine boş bir JAR oluşturmanızı ve diğer tüm öğeleri çıkış köküne el ile eklemenizi öneririm. Bu yöntem için harika bir blog makalesi burada bulunabilir: http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ Burada belirtilen adımları denedim ve her şey yolunda gitti benim için!


Teşekkürler, bu bana yardımcı oldu! Intellij'de, "Diğer" yerine artefakt türü olarak "JAR" seçeneğini belirlerseniz, projenin manifest'inin JAR'da varsayılan bir manifest tarafından üzerine yazıldığı bir hata var gibi görünüyor.
kırmızı

0

Diğer cevaplardan bazıları işe yaramaz çünkü IntelliJ IDEA projesini maven projesinden tekrar alır almaz tüm değişiklikler kaybolacak.

Kavanozun yapımının proje ayarları tarafından değil, bir çalıştırma / hata ayıklama yapılandırması tarafından tetiklenmesi gerekir.

Jetbrains'in bunu nasıl başarabileceğinize dair güzel bir açıklaması var:

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

"Maven hedefleri için tetikleyicileri yapılandırma" bölümüne ilerleyin.

(Açıklamalarının tek dezavantajı, ekran görüntülerinin süper harika darcula teması yerine varsayılan siyah beyaz renk şemasında olmasıdır. Ugh!)

Yani, temelde, yaptığınız şey "Maven Projeleri" panelini açmanız, ilgilendiğiniz projeyi bulmanız, (sizin durumunuzda, kavanozunuzu oluşturan proje) altında, yürütmek istediğiniz maven hedefini bulmanızdır. , (genellikle "paket" hedefi kavanozlar oluşturur) üzerinde içerik menüsünü açarsınız (bir Windows makinesine sağ tıklayın) ve bir "Çalıştır / Hata Ayıklamadan Önce Yürüt ..." seçeneği seçin ve sizi oradan elinize götürecektir. Gerçekten kolay.


0

Kotlin ile bir kavanoz oluşturmaya çalışıyorsanız, bir src/main/javaklasör oluşturmanız ve bu klasörü META-INF klasörü için bir konum olarak kullanmanız gerekir .


0

İşte IntelliJ IDEA 2018.3 Yardım'ın resmi cevabı . Denedim ve çalıştı.

Bir modülden bir JAR dosyası oluşturmak için;

  1. Ana menüde Oluştur | Yapı Oluşturun.

  2. Açılır listeden, JAR türünün istenen yapısını seçin. Liste, mevcut proje için yapılandırılmış tüm eserleri gösterir. Yapılandırılmış tüm yapay nesneleri oluşturmak için Tüm yapay nesneleri oluştur seçeneğini belirleyin.


0

Benim sorunum şuydu: Intellij IDEA (farklı versiyonları denedim) + Gradle kullandım. Projeyi derlediğimde ve yukarıdaki yanıtlarda belirtildiği gibi artifacf kavanozu oluşturduğumda, bir hata aldım - "ana manifest attrubute ..."

Bu çözüm benim için çalıştı (ipucu için Thilina Ashen Gamage'e (yukarıya bakın) özel teşekkürler):

Alıntı - harici kütüphaneler kullanır ve Proje Ayarları aracılığıyla bir proje oluşturursanız - Eserler - Ekle (+) - Kavanoz - Bağımlılığa sahip modüllerden , muhtemelen bir program hatası nedeniyle, MANIFEST_MF dosyası içeren META-INF klasörü jar içermez. Bunu önlemek için BOŞ jar dosyası oluşturun.

Proje Ayarları - Eserler - Ekle (+) - Kavanoz - BOŞ BOŞ . META-INF klasörü kaynaklar klasörüne eklenecektir . Ardından ana sınıfınızı seçin. Aşağıdaki kavanoz yapısını göreceksiniz: bir klasörün varlığını not edin META-INF Bir klasörün varlığını not edin META-INF Ardından projenizi oluşturabilir ve yapay nesneler oluşturabilirsiniz. Bu çözüm javaFX uygulamaları için de çalıştı.


-1

İlkbahar / mvn projesinde çalışıyorsanız şu komutu kullanabilirsiniz:

mvn package -DskipTests

Jar dosyası hedef dizine kaydedilir.


-3

Karınca ve Maven yaygın olarak kullanılmaktadır. Ant'i tercih ederim, daha hafif olduğunu ve geliştiricinin daha kontrol altında olduğunu hissediyorum. Bazı onun olumsuz olduğunu önerebilir :-)


3
Bu, hatanın neden olduğunu açıklamak için hiçbir şey yapmaz.
baordog
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.