2013-06-10 11 views
12

Ich verwende IntelliJ IDEA 12.1.3. Ich habe ein Modul und ich versuche, es in ein Glas gemäß den Schritten zu konvertieren, die here gegeben werden. Ich habe die JAR-Datei erstellt und die JAR-Datei in D:/verschoben. Wenn ich versuche, dieses Glas ich folgende Meldung auszuführen:Erstellen Sie ein auslesbares Glas in IntelliJ IDEA

fehlgeschlagen Main-Klasse manifest-Attribut aus Glas

zu laden, wenn ich es java -classpath jar com.code.TestCase laufen mit es funktioniert perfekt.

Warum passiert das? Ich habe das Glas mit IntelliJ IDEA erstellt. In diesem Jar hat es den ganzen Code für alle externen Bibliotheken, die ich hinzugefügt habe.

Im src Manifest-Datei:

Manifest-Version: 1.0 
Main-Class: com.code.TestCase 

aber der Manifest-Datei Inhalt des jar ist:

Manifest-Version: 1.0 
Build-Jdk: 1.6.0 
Built-By: ubuntu 
Created-By: Apache Maven 
Archiver-Version: Plexus Archiver 

Name: org.apache.log4j 
Implementation-Vendor: "Apache Software Foundation" 
Implementation-Title: log4j 
Implementation-Version: 1.2.15 

Warum Main-Class in der JAR-Datei MANIFEST.MF nicht hinzugefügt ist, aber es hat Main-Class in src?

+1

Intellij Idee * 1 *? oder meinst du vielleicht 11, 12 oder 13 ... – vikingsteve

+1

Kannst du deine 'com.code.TestCase' Klasse teilen? Es sollte die Hauptmethode haben –

+0

@vikingsteve Es ist 12.1.3 – muthu

Antwort

0

Eine der wichtigen Regeln ist, dass die Manifestdatei mit einer neuen Zeilen- oder Wagenrücklaufzeichen enden muss. Wenn es nicht dort ist, dann füge jetzt hinzu.

+1

aber es wird erstellt von intellij IDEA – muthu

+1

Das Standard-Manifest erstellt von IDEA 12.1.3 hat eine leere Zeile an der Ende. – vikingsteve

42

Ich habe das gleiche Problem erlebt und fand ein Update und/oder Fehler in wie IntelliJ Auto den Weg für das Manifest auffüllt.

IntelliJ UI

Wenn ein Artefakt Erstellen JAR-Dateien zu erstellen, auffüllt IntelliJ Auto die den Pfad, wo der Strom manifestieren befindet.

d. H. Nach der Auswahl der Hauptklasse auf der Artefakt-Erstellungsseite fügt Intellij automatisch den folgenden Pfad hinzu: \ src \ java \ META-INF \ MANIFEST.MF. Aus irgendeinem Grund nimmt der Build-Befehl nie die erwähnte MANIFEST.MF-Datei. Es erstellt eins von Grund auf ohne die Main-Class-Definition, die sich auf die "fehlgeschlagene Hauptklasse zu laden"

Wenn die Verwendung der IntelliJ UI zum Erstellen von Jar-Artefakte; Entfernen Sie den Pfad zum automatischen Auffüllen, indem Sie ihn in /$PROJECT_DIR/src/ ändern, und klicken Sie auf OK.

Beispiel von dem, was es ist standardmäßig wie folgt aussieht:

default intellij jar artifact settings

Nun ist dies, wie es nach der Änderung aussehen soll:

RICHTIG MANIFESTE

fixed intellij artifact settings

HANDBUCH FIX NEHMEN .MF DATEI

Auf dem I ntelliJ Projekt, öffnen Sie .idea \ artifacts \ _jar.xml

Stellen Sie sicher, es enthält

<element id="directory" name="META-INF"> 
    <element id="file-copy" path="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" /> 
    </element> 

Sie könnten IntelliJ nachladen müssen, wenn Sie dies tun, so nimmt es auf die Änderungen in der XML-Datei auf

Für mich ist es auf Maven Projekte geschehen, wo eine andere Struktur existiert (zB src/main/java/..).

Ich bin mit OSX 10.9.2 mit IntelliJ Version 12.1.6

Hoffnung, das hilft.

+0

Vielen Dank für das Posten. Hat nach einer Lösung gesucht und versucht zu verstehen, warum es nicht funktioniert – plosco

+0

Beste Antwort auf dieses Problem! – MSD561

+0

Danke BRO) Das ist auf jeden Fall Zeit sparen Post –