Führen Sie die Klasse in der Jar-Datei aus

176

Wenn Sie eine JAR - Datei genannt haben myJar.jarsich in / myfolder und Sie wollen die Klasse mit dem Namen verwenden , myClassdavon, wie Sie gehen über es von der Kommandozeile zu tun?

Ich dachte, es wäre, in das Verzeichnis zu gehen und zu sagen, java -cp myJar.jar.myClassaber das funktioniert nicht. Jede Hilfe wäre dankbar.

Jim
quelle
java -cp myJar.jar myClassfunktioniert gut für mich - haben Sie eine falsche Periode in Ihrer Befehlszeile anstelle eines Leerzeichens?
Chris Dodd
1
Was meinst du, wenn du sagst, dass du diese Klasse "benutzen" willst? Gibt es eine Hauptmethode, die Sie insbesondere aufrufen möchten?
Marsellus Wallace

Antworten:

256

Verwenden Sie java -cp myjar.jar com.mypackage.myClass.

  1. Wenn sich die Klasse nicht in einem Paket befindet, dann einfach java -cp myjar.jar myClass.

  2. Wenn Sie sich nicht in dem Verzeichnis befinden, in dem Sie sich befinden myJar.jar, können Sie Folgendes tun:

    1. Auf Unix- oder Linux-Plattformen:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. Unter Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

Bitmap
quelle
10
Fügen Sie es einfach hinzu - falls com.mypackage.myClass (im obigen Beispiel) Abhängigkeiten von anderen Jars aufweist, führen Sie es wie folgt aus: java -cp abhängige Datei1.jar; abhängige Datei 2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.myClass
akjain
2
Ein möglicher Fehlerpfad, auf den Sie achten sollten, falls dies nicht funktioniert: Stellen Sie sicher, dass Ihr vollständig qualifizierter Pfad zu Ihrer Klasse genau mit dem übereinstimmt, was in Ihrer JAR-Datei enthalten ist. Wenn Sie -l /location-of-jar/myjar.jar entpacken und etwas anderes als com / mypackage / myClass sehen, ist dies Ihr Problem. (Wenn Sie zum Beispiel bin / com / mypackage / myClass sehen, sollten Sie in bin cd'ed haben, um Ihre JAR-Datei zu erstellen; was Sie haben, wird nicht funktionieren.)
Scott C Wilson
benutze MyClass, nicht myClass
Breno Inojosa
Wenn ich das Obige versuche, erhalte ich die Fehlerausnahme im Thread "main" java.lang.NoClassDefFoundError: cucumber / api / cli / Main unter com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Auslöser: java.lang.ClassNotFoundException: cucumber.api.cli.Main bei java.net.URLClassLoader.findClass (Unbekannte Quelle) bei java.lang.ClassLoader.loadClass (Unbekannte Quelle) bei sun.misc.Launcher $ AppClassLoader. loadClass (Unbekannte Quelle) bei java.lang.ClassLoader.loadClass (Unbekannte Quelle) ... 1 weitere
Vaibhav_Sharma
24

Sie wollen:

java -cp myJar.jar myClass

Die Dokumentation enthält das folgende Beispiel:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
Richard Campbell
quelle
18

In Java stehen zwei Arten von JAR-Dateien zur Verfügung:

  1. Ausführbare / ausführbare JAR-Datei, die eine Manifestdatei enthält. Um ein Runnable-Glas auszuführen, können Sie java -jar fileName.jaroder verwendenjava -jar -classpath abc.jar fileName.jar

  2. Einfache JAR-Datei, die keine Manifestdatei enthält, sodass Sie Ihre Hauptklasse einfach ausführen, indem Sie ihren Pfad angeben java -cp ./fileName.jar MainClass

Gaurav Singh
quelle
6

Angenommen, Sie befinden sich in dem Verzeichnis, in dem sich die myJar.jarDatei befindet, und das myClassenthält eine public static void main()Methode:

Sie verwenden die folgende Befehlszeile:

java -cp ./myJar.jar myClass

Wo:

  1. myJar.jarbefindet sich im aktuellen Pfad . Beachten Sie, dass er .auf den meisten Systemen nicht im aktuellen Pfad enthalten ist. Auch hier wird ein voll qualifizierter Weg bevorzugt.

  2. myClassWenn es sich um einen vollständig qualifizierten Paketpfad zur Klasse handelt, wird im Beispiel davon ausgegangen, dass myClasssich das Standardpaket in einer schlechten Praxis befindet, wenn es sich in einem verschachtelten Paket befindet com.mycompany.mycode.myClass.


quelle
1

Dies ist der richtige Weg, um eine auszuführen .jar, und was auch immer eine Klasse in dieser haben .jarsollte main()und die folgenden sind die Parameter dafür:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
ubersucks
quelle