Wie baue ich Gläser aus IntelliJ richtig?

519

Ich habe ein Projekt, das ein einzelnes Modul und einige Abhängigkeiten enthält. Ich möchte ein JAR in einem separaten Verzeichnis erstellen, das das kompilierte Modul enthält. Außerdem möchte ich, dass die Abhängigkeiten neben meinem Modul vorhanden sind.

Unabhängig davon, wie ich den "Build Jar" -Prozess von IntelliJ verdrehe, erscheint die Ausgabe meines Moduls leer (neben einer META-INF-Datei).

Ripper234
quelle

Antworten:

602

So erstellen Sie ein Glas mit IntelliJ 10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

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

Das obige setzt das "Skelett" dahin, wo das Glas gespeichert wird. Gehen Sie wie folgt vor, um es tatsächlich zu erstellen und zu speichern:

Zum Zielglas extrahieren

OK

Build | Artefakt bauen | Bauen

Versuchen Sie, die JAR-Datei aus zu extrahieren

Projektname | out | Artefakte | ProjectName_jar | ProjectName.jar

EpicPandaForce
quelle
9
Es schlägt fehl, wenn einige Klassen in Ihrem enthaltenen Jar mit RSA signiert sind.
Asif Shahzad
1
@AsifShahzad Diese Antwort finden Sie zum Erstellen von JAR-Dateien mit signierten Abhängigkeiten: stackoverflow.com/questions/41746177/… .
5
Diese Methode schlägt immer noch fehl, die JAR-Datei wird nicht ausgeführt
Samuel Owino
6
Es scheint, dass jemand wirklich sehr hart gearbeitet hat, um es nicht zum Laufen zu bringen. Es ist so schade, dass es nie funktioniert. Ich habe mindestens 50 verschiedene Antworten ausprobiert und nichts davon hat funktioniert. Und es ist jedes Mal die gleiche Geschichte. Jetzt behalte ich mir eine Woche Zeit, um es nur als Glas auszugeben, da jeder in unserem Unternehmen der Meinung ist, dass es eine echte Anstrengung ist, ein Ausgabeglas herzustellen.
Super
2
Wie viele vor mir geschrieben haben, ist dies eine Vereinfachung, die manchmal funktioniert. Bitte lesen Sie die Antwort von @zsolt tolvali weiter unten. Aus Sicht von IntelliJ wäre es gut, den JAR-Erstellungsprozess bei der Erstellung eines neuen Projekts zu einer STANDARDAKTIVITÄT zu machen, da nur sehr wenige Leute ihn nicht benötigen!
Etamar Laron
256

Dies ist auch 2017 ein Problem, ich hoffe, es wird jemandem da draußen helfen! Ich habe unter IntelliJ 2017.2 zwei Möglichkeiten gefunden, Arbeitsgläser zu erstellen

1. Erstellen von Artefakten aus IntelliJ:

  • Zur Projektstruktur gehen:

Dateimenü

  • Erstellen Sie ein neues Artefakt:

Erstellen Sie ein neues Artefakt

  • Wählen Sie die Hauptklasse aus und ändern Sie den Manifestordner:

Geben Sie hier die Bildbeschreibung ein

Sie müssen das Manifestverzeichnis ändern:

<project folder>\src\main\java 

Ersetzen Sie "Java" durch "Ressourcen"

<project folder>\src\main\resources

So sollte es aussehen:

richtiger Weg für neues Manifest

  • Dann wählen Sie die Abhängigkeiten aus, die in Ihre JAR-Datei oder in die Nähe Ihrer JAR-Datei gepackt werden sollen

  • Um Ihr Artefakt zu erstellen, gehen Sie zum Erstellen von Artefakten und wählen Sie "Neu erstellen". Es wird ein "out" -Ordner mit Ihrer JAR-Datei und ihren Abhängigkeiten erstellt.

Geben Sie hier die Bildbeschreibung ein

2. Verwenden des Maven-Assembly-Plugins

Fügen Sie der POM-Datei einen Build-Abschnitt hinzu

    <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>
  • Erstellen Sie eine neue Run / Debug-Konfiguration:

Erstellen Sie eine neue Run / Debug-Konfiguration:

  • Anwendung auswählen:

Wählen Sie die Anwendung

  • Fülle das Formular aus
  • Fügen Sie das Maven-Ziel "Assembly: Single" nach dem zuletzt ausgeführten Build hinzu

Geben Sie hier die Bildbeschreibung ein

Endgültige Einrichtung

  • Speichern Sie es und führen Sie es aus

Geben Sie hier die Bildbeschreibung ein

Durch dieses Verfahren wird die JAR-Datei unter dem Ordner "Ziel" erstellt

Speicherort der JAR-Datei

Zsolt Tolvaly
quelle
6
Das Manifest-Verzeichnis in src / resources ändern ist der entscheidende Punkt !!! danke ~
Fantouch
3
Dieser MANIFEST-Pfad ist der kritischste, danke @Zsolt Tolvaly
fruqi
2
Ich habe no main manifest attributedie oben genannten Lösungen übernommen. Niemand hat erwähnt, die zu ändern path to manifest. Danke !!
Prometheus
1
Dies sollte die beste Antwort sein. Vielen Dank!
Giorgos Lamprakis
Wie wäre es mit Quellcode in Scala? Java ist nicht das, was ich benutze
Kiwy
135

Ich hatte kürzlich dieses Problem und denke, dass diese Schritte leicht zu befolgen sind, wenn eine vorherige Lösung oder ein Link keine Details enthält.

So erstellen Sie eine .jarmit IntelliJ IDEA 14.1.5:

  1. Datei> Alle speichern.
  2. Führen Sie den Treiber oder die Klasse mit der Hauptmethode aus.
  3. Datei> Projektstruktur.
  4. Wählen Sie die Registerkarte "Artefakte".
  5. Klicken Sie oben im Fenster auf die grüne Plus-Schaltfläche.
  6. Wählen Sie JAR aus dem Dropdown-Menü Hinzufügen. Wählen Sie "Aus Modulen mit Abhängigkeiten".
  7. Hauptklasse auswählen.
  8. Das Optionsfeld sollte "In die Ziel-JAR extrahieren" auswählen. Drücke OK.
  9. Aktivieren Sie das Kontrollkästchen "Build on make"
  10. Drücken Sie Übernehmen und OK.
  11. Wählen Sie im Hauptmenü die Build-Dropdown-Liste aus.
  12. Wählen Sie die Option Artefakte erstellen.
Benutzer5442490
quelle
1
hast du etwas verpasst Es gibt eine Option über das Modul, was das sein soll. In meinem Fall wird aus Sicherheitsgründen JAR, aber JVM durch Fehler erstellt.
Sonus21
Ich denke, diese Liste ist alles. Möglicherweise haben Sie etwas mit Ihren Java-Einstellungen, das es aus Sicherheitsgründen stoppt. Hat noch jemand Gedanken dazu?
user5442490
Befolgte das gleiche und ich habe Fehler: Die Hauptklasse JavaFundamentals.jar konnte beim Ausführen dieser JAR-Datei nicht gefunden oder geladen werden. Hier erklärt: stackoverflow.com/questions/40636790/…
laggerok19
Muss dieser 12-stufige Prozess jedes Mal ausgeführt werden, wenn ich ein Glas erstellen möchte, oder wird sich IntelliJ an diese Aktionen erinnern, damit Sie eine Verknüpfung dazu verwenden können?
Andy
31

Für diejenigen, die wie ich von Bildern profitieren:

File -> Project Structure

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Crt
quelle
4
@samuelowino Ich weiß es nicht zu schätzen, dass du das sagst. Erklären Sie, was "überhaupt nicht funktioniert".
Crt
1
Hey @Crt Ich habe nicht die richtige JAR-Datei überprüft, anscheinend hat Inteliji zwei JAR-Dateien in verschiedenen Verzeichnissen erstellt. Entschuldigung, meine schlechte, Ihre Lösung funktioniert, danke
Samuel Owino
15

Hier sind 2 Beispiele mit Maven-Projekt, Schritt für Schritt:

Methode 1: Erstellen Sie ein Glas mit maven und pom.xml

  1. Datei, neu, Projekt, Maven
  2. Erstellen Sie ein Paket, erstellen Sie ein Java-Programm in diesem Paket Geben Sie hier die Bildbeschreibung ein
  3. Fügen Sie unter pom.xml das Maven-Jar-Plugin hinzu.

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

Screenshot: Geben Sie hier die Bildbeschreibung ein 4. Öffnen Sie das Maven-Projektfeld, indem Sie auf das Suchsymbol klicken und maven eingeben. Geben Sie hier die Bildbeschreibung ein

  1. Klicken Sie auf "Reinigen" und dann auf "Installieren" Geben Sie hier die Bildbeschreibung ein

  2. Ihre JAR-Datei wird im Zielordner angezeigt Geben Sie hier die Bildbeschreibung ein

  3. Testen Sie Ihr Glas mit Java-Jar

Geben Sie hier die Bildbeschreibung ein

Methode 2: Erstellen Sie ein Glas mit maven ohne Änderung von pom.xml

  1. Datei, neu, Projekt, Maven
  2. Erstellen Sie ein Paket, erstellen Sie ein Java-Programm in diesem Paket (wie oben)
  3. File-> Project Structure-> Project Settings-> Artifacts-> Klicken Sie auf green plus sign-> Jar->From modules with dependencies

Sehr wichtig!

Die MANIFEST.MF muss sich in Ihrem Ressourcenordner befinden und die Main.Class muss auf {package} - {Klassenname, der die Hauptklasse enthält} verweisen.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

  1. Klicken Sie dann auf Menü erstellen, Artefakte erstellen, erstellen

Geben Sie hier die Bildbeschreibung ein

  1. Finden Sie das Glas im Ordner out

Geben Sie hier die Bildbeschreibung ein

  1. starte es :)

Geben Sie hier die Bildbeschreibung ein

rrr
quelle
das funktioniert. Können Sie erklären, warum MANIFEST.MF in diesem Verzeichnis sein muss?
Ubeogesh
Das hilft mir
Devendra Singraul
5

Es ist wahrscheinlich etwas spät, aber ich habe es auf diese Weise gelöst -> mit winrar öffnen und ECLIPSEF.RSA und ECLIPSEF.SF im Ordner META-INF löschen, außerdem "Main-class: main_class_name" (ohne ".class"). ) in MANIFEST.MF. Stellen Sie sicher, dass Sie nach der letzten Zeile zweimal die Eingabetaste gedrückt haben, da dies sonst nicht funktioniert.

Baka
quelle
Was für ein verrücktes Problem. Irgendeine Idee, warum dies passiert oder wie man es behebt? Das fühlt sich hacky an
Andrew No
5

Wenn ich diese Lösung benutze , kommt dieser Fehler:

java -jar xxxxx.jar

Kein Hauptmanifestattribut in xxxxx.jar

und Lösung ist :

Sie müssen das Manifestverzeichnis ändern:

<project folder>\src\main\java 

Java in Ressourcen ändern

<project folder>\src\main\resources
Saeed
quelle
Puh, endlich danke für den Tipp!
Rendon
@ Rendon Viel Glück Puh!
Saeed
Perfekt !. Dies funktioniert gut
jafarmlp
2

Ich habe versucht, ein JAR aus einer Kotlin- App mit mehreren Modulen zu erstellen, und habe den berüchtigten Fehler "Kein Hauptmanifestattribut" erhalten. Das Erstellen des Manifestverzeichnisses in src/main/resourceshat ebenfalls nicht funktioniert.

Stattdessen funktioniert es, wenn Sie es srcdirekt erstellen : src/META-INF/MANIFEST.MF.

Geben Sie hier die Bildbeschreibung ein

Tobias Uhmann
quelle
Hallo, danke, es funktioniert gut. Aber jetzt habe ich einen neuen Fehler, dass die Ressourcen "java.desktop / javax.swing.ImageIcon java.lang.NullPointerException" nicht gefunden werden
Shivam Mathur
2

Geben Sie hier die Bildbeschreibung ein

Wie die Leute oben sagen, aber ich muss einen Punkt beachten. Sie müssen das Kontrollkästchen aktivieren:

In die Projekterstellung einbeziehen

Benchur Wong
quelle
1

Idee 8.1.3

Jar ist in Ordnung, da die Ausgabe im Verzeichnis 'output' (project / out / Production //) kompiliert ist.

Ich denke, du musst 'make' ausführen, bevor du ein Glas baust

Für Abhängigkeiten aktivieren Sie einfach "Bibliothek anzeigen" und wählen Sie aus, was Sie möchten.

Vugluskr
quelle
1

Mit Maven können Sie dieses Plugin verwenden:

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

Vielleicht möchten Sie einen Blick auf Maven werfen ( http://maven.apache.org ). Sie können es entweder als Haupterstellungsprozess für Ihre Anwendung verwenden oder nur, um bestimmte Aufgaben über das Dialogfeld "Konfigurationen bearbeiten" auszuführen. Das Erstellen einer JAR eines Moduls in Maven ist ziemlich trivial, wenn Sie möchten, dass alle Abhängigkeiten in einer selbst ausführbaren JAR enthalten sind, die ebenfalls trivial ist.

Wenn Sie Maven noch nie zuvor verwendet haben, möchten Sie Better Builds With Maven lesen .

Gary Rowe
quelle
8
Maven ist offensichtlich für einfache Aufgaben wie das Erstellen eines Glases verantwortlich. Vielleicht Ant, aber nicht sicher.
Juriy
Link ist tot (Okt 2014)
KathyA.
1
@KathyA. Vielen Dank - aktualisiert, um die Empfehlungen des Maven-Teams zu verwenden.
Gary Rowe
5
Wenn es so trivial ist, warum nicht in Ihre Antwort aufnehmen?
Nuzzolilo
1
Weil ich möchte, dass der Leser die Website besucht und mit dem Lernprozess beginnt.
Gary Rowe
0

Wenn Sie mit Ihrem Projekt Bibliotheken von Drittanbietern verwenden oder Probleme beim ordnungsgemäßen Erstellen der MANIFEST.MF-Datei haben, kann es zu Konflikten beim Ausführen von JAR-Dateien kommen, die mit generiert wurden

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

oben erwähnte Methode.

Stattdessen empfehle ich Ihnen, eine leere JAR zu erstellen und alle anderen Elemente manuell zum Ausgabestamm hinzuzufügen. Einen wundervollen Blog-Artikel für diese Methode finden Sie hier: http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ Ich habe die dort genannten Schritte ausprobiert und alles hat gut funktioniert für mich!

Thilina Ashen Gamage
quelle
Danke, das hat mir geholfen! In Intellij scheint es einen Fehler zu geben, bei dem das Manifest des Projekts in der JAR durch ein Standardmanifest überschrieben wird, wenn Sie "JAR" als Artefakttyp anstelle von "Andere" auswählen.
rot
0

Einige der anderen Antworten sind nutzlos, da alle Änderungen verloren gehen, sobald Sie das IntelliJ IDEA-Projekt erneut aus dem Maven-Projekt importieren.

Das Erstellen der JAR muss durch eine Run / Debug-Konfiguration ausgelöst werden, nicht durch die Projekteinstellungen.

Jetbrains hat eine schöne Beschreibung, wie Sie dies hier erreichen können:

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

Scrollen Sie nach unten zu dem Abschnitt "Konfigurieren von Triggern für Maven-Ziele".

(Der einzige Nachteil ihrer Beschreibung ist, dass ihre Screenshots im Standard-Schwarz-Weiß-Farbschema anstelle des super-fantastischen Darcula-Themas vorliegen. Ugh!)

Im Grunde genommen öffnen Sie das Bedienfeld "Maven-Projekte" und finden das gewünschte Projekt (in Ihrem Fall das Projekt, das Ihr Glas erstellt). Darunter finden Sie das Maven-Ziel, das Sie ausführen möchten , (normalerweise werden durch das Ziel "Paket" Gläser erstellt) Sie öffnen das Kontextmenü darauf (klicken Sie mit der rechten Maustaste auf einen Windows-Computer), und es wird die Option "Vor dem Ausführen / Debuggen ausführen ..." angezeigt Wählen Sie und es wird Sie von dort an der Hand nehmen. Wirklich einfach.

Mike Nakis
quelle
0

Wenn Sie versuchen, ein Glas mit Kotlin zu erstellen, müssen Sie einen src/main/javaOrdner erstellen und diesen Ordner als Speicherort für den META-INF-Ordner verwenden.

Chris
quelle
0

Hier ist die offizielle Antwort der IntelliJ IDEA 2018.3-Hilfe . Ich habe es versucht und es hat funktioniert.

So erstellen Sie eine JAR-Datei aus einem Modul;

  1. Wählen Sie im Hauptmenü Build | Artefakt bauen.

  2. Wählen Sie aus der Dropdown-Liste das gewünschte Artefakt vom Typ JAR aus. Die Liste zeigt alle für das aktuelle Projekt konfigurierten Artefakte. Um alle konfigurierten Artefakte zu erstellen, wählen Sie die Option Alle Artefakte erstellen.

Sabri Meviş
quelle
0

Mein Problem war folgendes: Ich habe Intellij IDEA (verschiedene Versionen ausprobiert) + Gradle verwendet. Als ich das Projekt kompilierte und artifacf jar erstellte, wie in den obigen Antworten angegeben, erhielt ich den Fehler "no main manifest attrubute ..."

Diese Lösung hat bei mir funktioniert (besonderer Dank geht an Thilina Ashen Gamage (siehe oben) für den Tipp):

Auszug - Wenn Sie externe Bibliotheken verwenden und ein Projekt über Projekteinstellungen erstellen - Artefakte - Hinzufügen (+) - Jar - Aus Modulen mit Abhängigkeiten , dann wahrscheinlich aufgrund eines Programmfehlers den Ordner META-INF mit der Datei MANIFEST_MF, die nicht in jar enthalten ist. Um dies zu vermeiden, erstellen Sie eine leere JAR-Datei.

Projekteinstellungen - Artefakte - Hinzufügen (+) - Glas - LEERES GLAS . Der Ordner META-INF wird dem Ressourcenordner hinzugefügt . Wählen Sie dann Ihre Hauptklasse aus. Sie sehen die folgende JAR-Struktur: Beachten Sie das Vorhandensein eines Ordners META-INF Beachten Sie das Vorhandensein eines Ordners META-INF. Anschließend können Sie Ihr Projekt erstellen und Artefakte erstellen. Diese Lösung funktionierte auch für JavaFX-Anwendungen.

Orkhan Hasanli
quelle
-1

Wenn Sie an einem spring / mvn-Projekt arbeiten, können Sie diesen Befehl verwenden:

mvn package -DskipTests

Die JAR-Datei wird auf dem Ziel-Directoy gespeichert.

Hans Pour
quelle
-3

Ameise und Maven sind weit verbreitet. Ich bevorzuge Ant, ich finde es leichter und Sie als Entwickler haben mehr Kontrolle. Einige würden vorschlagen, dass das sein Nachteil ist :-)

Brian
quelle
3
Dies erklärt nicht, warum der Fehler auftritt.
Baordog