1312 Stimmen

Kann JAR-Datei nicht ausführen: "kein Hauptmanifestattribut"

Ich habe eine Anwendung installiert, wenn ich versuche, sie auszuführen (es handelt sich um ein ausführbares Jar), passiert nichts. Wenn ich es von der Befehlszeile ausführe mit:

java -jar "app.jar"

Ich bekomme die folgende Meldung:

kein Hauptmanifestattribut in "app.jar"

Normalerweise, wenn ich das Programm selbst erstellt hätte, hätte ich ein Hauptklassenattribut zur Manifestdatei hinzugefügt. Aber in diesem Fall, da die Datei von einer Anwendung stammt, kann ich das nicht tun. Ich habe auch versucht, das Jar zu extrahieren, um zu sehen, ob ich die Hauptklasse finden könnte, aber es gibt zu viele Klassen und keine von ihnen hat das Wort "main" in ihrem Namen. Es muss einen Weg geben, das zu beheben, denn das Programm läuft einwandfrei auf anderen Systemen.

17voto

shuang Punkte 203

Wenn Sie Maven verwenden, fügen Sie folgendes in das Pom ein

    org.springframework.boot
    spring-boot-starter-parent
    1.4.2.RELEASE

    1.8

            org.springframework.boot
            spring-boot-maven-plugin

16voto

Yury Finchenko Punkte 975

Das MAVEN-Problem besteht darin, dass es versucht, die erste MANIFEST.MF-Datei aus der ersten Bibliothek der Abhängigkeiten einzuschließen, anstatt UNSERE EIGENE MANIFEST.MF zu verwenden WENN SIE ARTEFAKTE VERWENDEN!.

  1. Benennen Sie yourjar.jar in yourjar.zip um

  2. Öffnen Sie die MANIFEST.MF-Datei unter META-INF\MANIFEST.MF

  3. Kopieren Sie die tatsächliche MANIFEST.MF, die bereits in Ihrem Projekt durch MAVEN generiert wurde, einschließlich so etwas:

    Manifest-Version: 1.0 Main-Class: yourpacket.yourmainclass (zum Beispiel info.data.MainClass)

  4. Ersetzen Sie den Inhalt von MANIFEST.MF in youjar.zip damit.

  5. Benennen Sie yourjar.zip wieder in yourjar.jar um.

  6. Jetzt funktioniert java -jar yourjar.jar einwandfrei.

ODER!

Erstellen Sie einfach Ihre eigene MANIFEST.MF und:

    org.apache.maven.plugins
    maven-jar-plugin
    3.2.0

             Ihr Pfad wie: src/main/resources/META-INF/MANIFEST.MF 
            true

                    true

Aber wenn Sie das MAVEN-Panel verwenden (oder die MAVEN-Befehlszeile), können Sie es dazu zwingen, ein eigenes Manifest zu generieren und es in die JAR-Datei einzuschließen.

  1. Fügen Sie dem Build-Abschnitt Ihrer pom.xml diesen Code hinzu:

            org.apache.maven.plugins
            maven-assembly-plugin
            3.2.0
    
                    package
    
                        single
    
                    jar-with-dependencies
    
                    true
    
                        true
                         yourpacket.yourmainclass (zum Beispiel info.data.MainClass)
    
                        development
                        ${project.url}
  2. Öffnen Sie das MAVEN-Panel (in IntelliJ) und führen Sie "Install" aus. Es generiert die MANIFEST-Datei und kompiliert richtig die JAR-Datei mit allen Abhängigkeiten in den "Target"-Ordner. Außerdem wird es im lokalen MAVEN-Repository installiert.

11voto

MTA Punkte 711

Ich hatte heute das gleiche Problem. Mein Problem wurde gelöst, indem ich META-INF in den Ressourcenordner verschoben habe.

11voto

Binakot Punkte 298

Ich habe gerade den gleichen Fehler bekommen. Wenn du gradle benutzt, füge einfach folgendes in deine gradle.build hinzu:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.company.project.MainClass'
    }
}

Wo com.company.project.MainClass der Pfad zu deiner Klasse mit der Methode public static void main(String[] args) ist.

9voto

John M Punkte 12793

Wenn das Glas nicht den Regeln folgt, ist es kein ausführbares Glas.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X