BASICS: Java Programm ohne IDE starten, How-to?

Snape

Erfahrenes Mitglied
Moin,
nachdem es nun auch mich erwischt hat mit dem NoClassDefFoundError, wie wär es mit einem Java Programme starten für Dummies ? ;-)

Ich habe jetzt ein Weilchen herumgesucht, aber es war nicht viel Ergiebiges dabei. Ausser, DASS z.B. hier und da der CLASSPATH gesetzt sein muss und WO man das macht, steht nirgends, WAS da eingetragen werden muss. Oder wo man das Programm startet. Welche Änderungen ergeben sich, wenn man mit verschiedenen packages arbeitet? Usw. usw.

Also jetzt mal "Butter bei die Fische":

Was muss in den Systemvariablen eingetragen sein (JAVA_HOME, PATH, CLASSPATH,...?) und wo und wie erfolgt der Programmaufruf (mit welchen Parametern), wenn z.B. diese sicher nicht untypische Verteilung der Source- und Class-Dateien vorliegt?

D:\eclipse\workspace\bin\ <-- die kompilierten class-Dateien, also z.B. PrinterSetup.class für die Quelldatei unten
D:\eclipse\workspace\src\myPackage\PrinterSetup.java <--- Source-Datei

D:\JDK1.3.1_02\ <-- Pfad des installierten JDKs


Ich weiss, dass es ein einfaches ist, mit Eclipse, JBuilder usw. ein Javaprogramm zu starten. Aber was, wenn man das Programm wirklich jemandem weitergeben möchte, der es nur benutzen soll und keine Java IDE hat?
 
PATH Umgebungsvariable ist dafür zuständig wo das Betriebssystem ausführbare Programme sucht.


CLASSPATH Umgebungsvariable in der nach Klassen gesucht wird.
Klassen werden so im Classpath abgelegt das die Unterordner die jeweiligen Packete wiederspiegeln. So würde eine Klasse de.tutorials.MyClass wie folgt im Classpathordner, der hier als Beispiel C:\classes ist, abgelegt:
c:\classes\de\tutorials\MyClass.class.
Damit diese Klasse gefunden werden kann muss der Ordner C:\classes in der CLASSPATH Umgebungsvariable definiert werden.

Unter Windows geht das über: Systemsteuerung -> System (irgendwo gibts ein Button Umgebungsvariablen (bitte Windowsbenutzer mich aufklären wo genau) )
Unter UNIX/Linux sollte der Path für den User unter $HOME/.bashrc angegeben werden. (Andere Orte wie unter /etc/bashrc als default) sind auch möglich.
Jars (im grunde Zip Dateien) können ebenfalls in dem CLASSPATH definiert werden. Hierbei wird nicht der Ordner sondern die Datei insgesammt definiert.
Ein Classpath mit dem Ordner C:\classes und der Datei C:\jars\myApp.jar würde demnach so aussehen:
Windows:
CLASSPATH=C:\classes;C:\jars\myApp.jar
UNIX(Linux)
CLASSPATH=/usr/lib/classes:/usr/jars/myApp.jar

Es gibt 3 durchläufe um Klassen zu finden.
Zu erst werden Klassen in dem bootstrap Classpath gesucht. Das ist der Classpath der die
Klassen der JRE enthält. Sieht z.b so aus:
/usr/lib/BlackdownJava2-1.4.1/jre/lib/rt.jar:/usr/lib/BlackdownJava2-1.4.1/jre/lib/i18n.jar... usw

Danach werden die Erweiterungs Ordner durchsucht. Diese stehen im Property "java.ext.dirs", hier mal nicht weiter wichtig.

Erst dann werden die Klassen im Classpath gesucht. Das heisst mann kann nicht
einfach eine eigene java.util.ArrayList entwickeln und somit Java aushebeln.

Jar Dateien haben eine tolle eigenart. Und zwar starten die bei Doppelklick die main Methode und somit die Applikation.
Dazu muss die Klasse die zu startende Main Methode beherbergt in der Datei META-INF/MANIFEST.MF durch folgenden Eintrag angegeben werden:
Main-Class: Klassenname

Falls es nicht möglich ist die Jar per doppelklick zu starten sollte mann schauen
das .jar Dateien dem Befehl (Windows) javaw -jar (unix) java -jar
zugeordnet wird.

Der Classpath muss nicht unbedingt in der Umgebungsvariable angegebenn werden, sondern kann auch als Kommandozeilenoption angegeben werden:

java -cp C:\classes;\C:\jars\myApp.jar [main class]

Die Mainclass muss den kompletten Klassenname der Klasse enthalten die, die main Methode definiert.
Also [packet]+[Klassenname]
de.tutorials.MyClass

Somit wäre der Komplette befehl um die Applikation mit der Mainmethode in de.tutorials.MyClass mit der myApp.jar als Lib und den klassen unter C:\classes
zu starten folgender:

java -cp C:\classes;\C:\jars\myApp.jar de.tutorials.MyClass

Ein oft gemachter Fehler ist statt den Klassennamen den Dateinamen MyClass.class anzugeben.

Ausbaufähig, aber wenn ihr was hinzufügen wollt, umschreiben wollt einfach drunter anfügen ;)
 
Muchas Gracias

Hi,
na das ist doch mal ein Wort. Thx für die ausführliche Darstellung. Das sollte m.E. als Tutorial bereitgestellt werden, so funktioniert es einwandfrei.
:)

PS: Die Umgebungsvariable gibts unter Windows dort:
1. Auf dem Arbeitsplatz-Symbol auf dem Desktop rechte Maustaste->Eigenschaften.
2. Auf Reiter "Erweitert" klicken
3. In der Mitte findet sich jetzt ein Button "Umgebungsvariablen"
 
Hallo!

... damit jedoch auch noch die Klassen gefunden werden die im aktuellen Verzeichnis liegen ... (an dem Problem scheitern Anfänger oft) muss auch noch der Punkt "." im Classpath stehen.

Gruß tom
 
Nicht ganz Korrekt.

Auch unter Windows kann ein Nicht-Admin die Umgebungsvariable setzen. Deshalb die Trennung in Systemvariable / Umgebungsvariable des Nutzers.

Um den Path zu erweitern muß bei den Nutzervariablen eine nach diesem Muster hinzugefügt werden:

PATH=%PATH%;Erweiterung

Dies ist als normaler Benutzer möglich.

cybi
 
Hi Jungs.

Ich finde es ganz toll , wie ihr hier Sachen erklärt, daher setzte ich meine Frage mal hier rein. Also ich habe Java Eclipse und einige Programme darin geschrieben, nun möchte ich, dass diese ohne einen Start von Java Eclipse ausgeführt werden können, so dass ich sie überall verwenden kann. Den obenstehenden Artikel habe ich leider nicht ganz verstanden. Ich habe nun ein Programm gefunden, dass von Jar auf exe umwandelt, launch4j, nun habe ich aber keine jar Datei. Ihr könnt mir doch bestimmt, mit einfachen Worten, erklären wie ich das hinbekomme, wäre echt genial.

Vielen Dank für eure Hilfe

Mit freudlichen Grüßen Stefan
 
Wenn du Eclipse verwendest ist das ganze recht einfach.
  1. Du klickst rechts auf dein Projekt, dass du in eine jar umwandeln willst und wählst Export aus.
  2. In der Liste die dort auftaucht wählst du Java/JAR file --> weiter
  3. Im nächsten Dialog kannst du auswählen, welche Dateien du in die Jar packen willst (für den Anfang wahrscheinlich alles, was in deinem Projekt ist) und wo das Jar File gespeichert werden soll. --> weiter
  4. Hier kannst du angeben, dass das jar auch mit Fehlern und Warnungen erstellt werden soll. Auch sehr praktisch ist "Save the description of this JAR in the workspace". Damit kannst du den hier beschriebenen Prozess immer wieder ausführen lassen ohne dich durchklicken zu müssen. -->weiter
  5. Manifest erstellen: "Generate the manifest file" auswählen und dann unten die Main-class deines Projektes auswählen(!) (Am besten über den Browse Button). Wenn du eine Bibliothek erstellst, dann hast du selbstverständlich keine main.
  6. ---Finish---
Die erstellte jar kannst du nun in der Konsole über java -jar <jarname>.jar starten.
(Anmerkung: Ich benutze Eclipse 3.2.1.)

Beim Erstellen hast du noch einiges mehr an Funktionen. Die meisten davon sind aber selbsterklärend und/oder für den Anfang irrelevant.

Ich hoffe das hilft dir weiter.
MfG
Daniel
 

Neue Beiträge

Zurück