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



## Snape (17. Juni 2004)

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?


----------



## Christian Fein (17. Juni 2004)

*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


----------



## Snape (17. Juni 2004)

*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"


----------



## squeaker (17. Juni 2004)

das anpassen der Umgebungsvariablen geht nur als Admin afaik.


----------



## Thomas Darimont (17. Juni 2004)

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


----------



## Cybernd (17. Juni 2004)

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


----------



## Steve86 (18. Dezember 2006)

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


----------



## Laocoon (18. Dezember 2006)

Wenn du Eclipse verwendest ist das ganze recht einfach.
Du klickst rechts auf dein Projekt, dass du in eine jar umwandeln willst und wählst _Export _aus.
In der Liste die dort auftaucht wählst du Java/JAR file --> weiter
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
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
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.
---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


----------



## flashray (18. Dezember 2006)

Hallo Snape,

das hier ist eine umfassende Seite zu Classpath:
http://mindprod.com/jgloss/classpath.html


Vg Erdal


----------



## Anime-Otaku (19. Dezember 2006)

Zum einfachen wandeln in ein jar hilft dir auch diese eclipse plugin: fat jar http://fjep.sourceforge.net/
(Eclipse hat sowas zwar auch von haus aus ab 3.2, aber ist etwas komplexer)


----------



## Steve86 (19. Dezember 2006)

Schon mal vielen Dank.Jetzt habe ich die Datei als jar Datei. Kann ich die jetzt so an jedem Pc öffnen oder muss ich die noch als exe umwandeln, das habe ich mit launch4j versucht, aber nicht auf die Reihe gekriegt. Könnt ihr mir da bitte nochmal einen Tip geben?


Vielen Dank Jungs


----------



## Anime-Otaku (19. Dezember 2006)

wie von Laocoon schon erwähnt musst du in der Kommandozeile einfach java -jar <jardatei> ausführen zum starten.


----------



## Steve86 (19. Dezember 2006)

Und muss dann java eclipse auf dem rechner installiert sein?


----------



## Anime-Otaku (19. Dezember 2006)

Der Rechner benötigt nur mind. ein installiertes JRE, der jeweiligen Version oder höher, aber sonst nicht mehr...hätte ja auch keinen Sinn.


----------



## Steve86 (19. Dezember 2006)

Das ist perfekt, jetzt dürft ihr mir nur noch das mit der Konsole erklären. Sorry, aber ich kenne mich halt überhaupt nicht damit aus, ist die Konsole in Eclipse selber oder wo finde ich die? Danke für eure Hilfe und Geduld.


----------



## Anime-Otaku (19. Dezember 2006)

Windows 2000/XP: Start-> Ausführen-> cmd


----------



## Steve86 (19. Dezember 2006)

Wenn ich den Begriif jetzt so in die Konsole eintippe, heißt es die datei könne nicht gefunden werden, gibt es da keine alternative? muss man immer konsole benutzen?


----------



## Anime-Otaku (19. Dezember 2006)

natürlich kann se nicht gefunden werden, weil die Datei nicht im aktuellen Verzeichnis ist. Du  musst schon den relativen oder ganzen Pfad zur Datei angeben oder dort hin gehen mittels "cd".


----------



## Steve86 (19. Dezember 2006)

Also ich habe es jetzt mehrfach versucht, und die datei sogar in den ordner verschoben, den er standardmäßig nimmt, aber es heißt immer datei nicht gefunden. Habt ihr noch irgendwelche Tips?

Also die Datei ist normal in C:\DokumenteundEinstellungen\Benutzername\EigeneDateien\Meine empfangenen Dateien\

aber das macht er irgendwie nicht, leider kenne ich mich mit dos und damit mit der konsole überhaupt nicht aus, die links haben zwar geholfen, aber ich kam trotzdem nicht weiter.

Aber danke für eure Hilfe


----------

