So führen Sie eine JAR-Datei aus

207

Ich habe eine JAR-Datei wie folgt erstellt:

jar cf Predit.jar *.*

Ich habe diese JAR-Datei durch Doppelklick ausgeführt (es hat nicht funktioniert). Also habe ich es über die DOS-Eingabeaufforderung wie folgt ausgeführt:

java -jar Predit.jar

Es wurden Ausnahmen "Hauptklasse konnte nicht geladen werden" ausgelöst. Also habe ich diese JAR-Datei extrahiert:

jar -xf Predit.jar

und ich habe die Klassendatei ausgeführt:

java Predit

Es hat gut funktioniert. Ich weiß nicht, warum die JAR-Datei nicht funktioniert hat. Bitte teilen Sie mir die Schritte zum Ausführen der JAR-Datei mit

Martin Prikryl
quelle

Antworten:

207

Sie müssen eine Hauptklasse im JAR-Dateimanifest angeben.

Das Tutorial von Oracle enthält eine vollständige Demonstration, aber hier ist eine weitere von Grund auf neu. Sie benötigen zwei Dateien:

Test.java:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}

manifest.mf:

Manifest-version: 1.0
Main-Class: Test

Beachten Sie, dass die Textdatei mit einer neuen Zeile oder einem neuen Zeilenumbruch enden muss. Die letzte Zeile wird nicht ordnungsgemäß analysiert, wenn sie nicht mit einer neuen Zeile oder einem neuen Wagenrücklauf endet.

Dann renne:

javac Test.java
jar cfm test.jar manifest.mf Test.class
java -jar test.jar

Ausgabe:

Hello world
Jon Skeet
quelle
1
Wenn die Testklasse eine andere Klasse über eine JAR-Datei referenziert, welche Änderungen müssen in diesem Fall vorgenommen werden?
Anand
@ Und dann müssen Sie eine Klassenpfadzeile in Ihr Manifest aufnehmen und auf die anderen JARs verweisen. docs.oracle.com/javase/tutorial/deployment/jar/downman.html
rob
Bitte helfen Sie mir bei dieser Frage: stackoverflow.com/questions/24740803/…
Sajad
Ich denke, Manifest-Version: 1.0 ist nicht erforderlich, da der Inhalt der angegebenen Manifest-Datei an die Standard-Manifest-Datei angehängt wird, die bereits die Version docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii enthält Oleinikov
2
Dies ist nur ein End-to-End-Beispiel. Perfekt einfach knackig. Ich habe stundenlang nach so etwas gesucht. Ich bin mir nicht sicher, warum das gesamte Internet mit so viel Müll gefüllt ist, ohne ein so einfaches Beispiel, wenn nach So erstellen Sie ein Java-Glas "Hallo Welt" gesucht wird. Vielen, vielen Dank.
Atul
58
java -classpath Predit.jar your.package.name.MainClass
Lynchen
quelle
Wenn dieses Glas andere Gläser verwendet, sollte der Klassenpfad dann nicht "/ path / to / jars / *" sein?
Maxim Chetrusca
5
@Max Chetrusca Ja , aber der Separator :verwendet *wird nicht funktionieren , weil die Shell es so erweitern: "/path/to/jars/a.jar" "/path/to/jars/b.jar"aber was wollen Sie wirklich: "/path/to/jars/a.jar:/path/to/jars/b.jar".
Lynch
29

Vor dem Ausführen ist die JAR-Prüfung Main-Class: classnamein der Datei MANIFEST.MF verfügbar oder nicht . MANIFEST.MF ist im Glas vorhanden.

java -jar filename.jar
KARTHIKEYAN.A
quelle
16

Sie müssen dem JAR ein Manifest hinzufügen, das der Java-Laufzeit mitteilt, was die Hauptklasse ist. Erstellen Sie eine Datei 'Manifest.mf' mit folgendem Inhalt:

Manifest-Version: 1.0
Main-Class: your.programs.MainClass

Ändern Sie 'your.programs.MainClass' in Ihre eigentliche Hauptklasse. Legen Sie nun die Datei in die Jar-Datei in einem Unterordner namens 'META-INF'. Sie können dafür jedes ZIP-Dienstprogramm verwenden.

Florian Fankhauser
quelle
1
Ist der Name des Unterordners 'Meta-inf' nur aus Neugier zwischen Groß- und Kleinschreibung zu unterscheiden? Ich habe traditionell gesehen, dass es "META-INF" geschrieben hat
Adam Paynter
Du hast recht. Die Spezifikation sagt "META-INF" und sagt nichts über Groß- und Kleinschreibung aus ( java.sun.com/j2se/1.4.2/docs/guide/jar/… )
Florian Fankhauser
12

Ein sehr einfacher Ansatz zum Erstellen einer .class-, .jar-Datei.

JAR-Datei ausführen. Sie müssen sich nicht zu viele Gedanken über die Manifestdatei machen. Machen Sie es einfach und elegant.

Java-Beispiel Hello World-Programm

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

Kompilieren der Klassendatei

javac HelloWorld.java

JAR-Datei erstellen

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

oder

jar cvfe HelloWorld.jar HelloWorld *.class

Ausführen der JAR-Datei

 java -jar HelloWorld.jar

Oder

java -cp HelloWorld.jar HelloWorld
nagendra547
quelle
Ja, mit der jarOption ' ekönnen Sie den Main-Class( Einstiegspunkt ) angeben und eine entsprechende Manifestdatei für Sie erstellen. Siehe die offizielle Dokumentation für jar .
Petr Bodnár
11

Wenn Sie kein Manifest erstellen möchten, nur um die JAR-Datei auszuführen, können Sie beim Ausführen der JAR-Datei direkt über die Befehlszeile auf die Hauptklasse verweisen.

java -jar Predit.jar -classpath your.package.name.Test

Dadurch wird festgelegt, welche Hauptklasse in der JAR-Datei ausgeführt werden soll.

Egil
quelle
2
-classpathkommt gleich danach javaund loswerden -jar(dh diese Antwort ist falsch)
Pete
4

Java

class Hello{
   public static void main(String [] args){
    System.out.println("Hello Shahid");
   }
}

manifest.mf

Manifest-version: 1.0
Main-Class: Hello

In der Befehlszeile:

$ jar cfm HelloMss.jar  manifest.mf Hello.class 
$ java -jar HelloMss.jar

Ausgabe:

Hello Shahid
Mohammad Shahid Siddiqui
quelle
3

Wenn Sie sich nicht mit diesen Details befassen möchten, können Sie auch die Export-JAR-Assistenten von Eclipse oder NetBeans verwenden.

fortran
quelle
3

Eclipse Runnable JAR-Datei

Erstellen Sie ein Java-Projekt - RunnableJAR

  • Wenn JAR-Dateien verwendet werden, fügen Sie sie dem Projekterstellungspfad hinzu.
  • Wählen Sie die Klasse mit main () aus, während Sie die Runnable Jar-Datei erstellen. Geben Sie hier die Bildbeschreibung ein

Hauptklasse

public class RunnableMainClass {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Name : "+args[0]);
        System.out.println(" ID  : "+args[1]);
    }
}

Führen Sie die Jar- Datei mit dem Java-Programm ( cmd ) aus, indem Sie Argumente angeben, und rufen Sie die Ausgabe und Anzeige in der Eclipse-Konsole ab.

public class RunJar { 
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        String jarfile = "D:\\JarLocation\\myRunnable.jar";
        String name = "Yash";
        String id = "777";

        try { // jarname arguments has to be saperated by spaces
            Process process = Runtime.getRuntime().exec("cmd.exe start /C java -jar "+jarfile+" "+name+" "+id);
                    //.exec("cmd.exe /C start dir java -jar "+jarfile+" "+name+" "+id+" dir");
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream ()));
            String line = null;
            while ((line = br.readLine()) != null){
                sb.append(line).append("\n");
            }
            System.out.println("Console OUTPUT : \n"+sb.toString());
            process.destroy();
        }catch (Exception e){
            System.err.println(e.getMessage());
        }
   }
}

In Eclipse finden Sie Verknüpfungen :

Hilfe ► Hilfeinhalt ► Java-Entwicklungsbenutzerhandbuch ► Referenzen ► Menüs und Aktionen

Yash
quelle
3

Ich habe diese Ordnerstruktur:

D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivpresse \ Hauptklasse D: \ JavaProjekte \ OlivePressApp \ com \ lynda \ olivpresse \ press \ OlivePress.Klasse D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivpresse \ olives \ Kalamata Klasse D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivpresse \ olives \ Ligurian.Klasse D: \ JavaProjects \ OlivePressApp \ com \ lynda \ olivpresse \ olives \ Olive.class

Main.class ist im Paket com.lynda.olivepress

Es gibt zwei weitere Pakete:

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) Erstellen Sie eine Datei mit dem Namen "Manifest.txt"Zwei Zeilen, Erste mit Hauptklasse und Zweite Leere Zeile.

Main-Class: com.lynda.olivepress.Main

D: \ JavaProjects \ OlivePressApp \ Manifest.txt

2) Erstellen Sie eine JAR mit Manifest und Einstiegspunkt der Hauptklasse

D: \ JavaProjects \ OlivePressApp>jar cfm OlivePressApp.jar Manifest.txt com/lynda/olivepress/Main.class com/lynda/olivepress/*

3) Führen Sie JAR aus

java -jar OlivePressApp.jar

Hinweis: com/lynda/olivepress/*bedeutet, dass die beiden anderen oben genannten Pakete vor Punkt 1 eingeschlossen werden.

Gabriel D.
quelle
-2

Um jar auszuführen, müssen Sie zuerst erstellen

ausführbares Glas

dann

java -jar xyz.jar

Befehl wird funktionieren

Deepa
quelle