Wie erstellt man eine Jar-Datei?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du vermischt in deinem Befehl einiges. Daher einmal eine schrittweise Erklärung:

Wenn du auf der Konsole

jar <some arguments ...>

ausführst, wird intern von deinem OS (in den Umgebungsvariablen) nach einem Programm (jar.exe) gesucht und dieses ausgeführt (lies dazu auch hier). Das Gleiche gilt für die java.exe:

java <some arguments ...>

Alternativ kannst du auch den kompletten Dateipfad zum Programm angeben:

"C:\...\jar.exe" <some arguments ...>

Dieser Weg macht Sinn, wenn du eine spezifische Programmversion aufrufen möchtest (angenommen, du hast mehrere Java-Versionen auf deinem Rechner installiert). Andernfalls würde ich empfehlen, den Pfad zum Verzeichnis, in dem Executable liegt, in der PATH-Umgebungsvariable einzutragen. In den ersten vier Absätzen dieser Antwort habe ich schon einmal genauer beschrieben, wie das genau geht.

Da du nun eine JAR erstellen möchtest, brauchst du die jar.exe.

jar -cf output.jar SomeClass.class

Mit java.exe könntest du wiederum eine erstellte JAR-Datei ausführen lassen.

java -jar output.jar

In deinem Fall versuchst du, eine Option j aufzurufen (das Programm nimmt das j von dem Token java und sucht nach einer dazu passenden Option), die allerdings nicht existiert.

Für das Erstellen von JAR-Dateien empfiehlt es sich, mit einer Manifest-Datei zu arbeiten. In der kann beispielsweise der Einstiegspunkt und der ClassPath (Stammverzeichnis der kompilierten Klassen) angegeben werden.

Beispiel:

Manifest-Version: 1.0
Main-Class: Main

Der Build:

jar cvmf manifest.txt output.jar *

Alle Dateien aus dem aktuellen Verzeichnis werden hierbei in das Archiv output.jar gepackt. Unter diesen sollte es auch eine Main.class geben, die eine main-Methode beinhaltet. Im Manifest wird diese Klasse als Einstiegspunkt angegeben. Wenn du die JAR ausführen lässt, kann die java.exe im Manifest nachschauen, wo die Ausführung starten soll.

Dieser gesamte Prozess lässt sich des Weiteren mit Managementtools wie Maven oder Gradle noch besser handhaben. IDEs wie Eclipse, IntelliJ IDEA oder NetBeans haben Maven/Gradle bereits integriert und auf visueller Ebene noch einmal abstrahiert, sodass du oftmals fast nur noch Knöpfe drücken musst. Im einfachsten Fall wählst du beim Erstellen eines neuen Projekts bereits das entsprechende Projekttemplate aus, sodass dir die IDE die passende Struktur mit pom.xml/build.gradle, u.ä. direkt anlegt.

Quickstart-Tutorials dazu:

Da das gesamte Thema etwas komplexer ist, würde ich zudem auf noch andere Dokumentationen/Tutorials verweisen.

Zur JAR:

Zu Maven:

Zu Gradle:

Hast du denn keine IDE die dir da hilft? Das ganze sieht ein bisschen so aus, als würde es noch sehr lange werden wenn mehr Dateien dazu kommen. Persönlich würde ich empfehlen, das anders zu machen besonders weil du mit IDEs wie IntelliJ auch ganz einfach mit Maven arbeiten kannst und wie Maven mit der Console etc funktioniert will ich erst gar nicht wissen.