PTP - Hinweise zu Java-Kommandos
Viele Studierende arbeiten heute von Anfang an mit Java-IDEs wie BlueJ oder Eclipse. Diese Tools nehmen dem Benutzer eine Menge an Konfigurationsarbeiten und den Umgang mit Optionen und Parametern ab. Leider führt diese Unterstützung oft zu Problemen, wenn man Java-Programmierung oder zumindest Übersetzung und Ausführung ohne die Tools machen will oder muss.
Hier ein paar kurze Infos zum Umgang mit einigen Java-Kommandos, die auf der Konsolebene benutzt werden können. Alle kennen die Option -help
. Die Beispiele sind für Unix formuliert.
Übersetzung: javac
Syntax: javac [options] files
Es können gleichzeitig mehrere Quellen angegeben werden. Abhängigkeiten löst der Compiler selber auf. Wichtige Optionen:
-classpath path
: Liste zu durchsuchender Verzeichnisse, die.class
-Dateien, ZIP- oder JAR-Dateien enthalten. Überschreibt ggf. die CLASSPATH-Umgebungsvariable des Systems und wird auch für die Suche nach Quelldateien verwendet, fallssourcepath
nicht gesetzt ist.-sourcepath path
: Liste zu durchsuchender Verzeichnisse, die Quelldateien, ZIP- oder JAR-Dateien mit Quellen enthalten.-source release
: spezielle Java-Version verwenden, z.B. 1.3-D directory
: Verzeichnis in dem (oder unterhalb dessen) die.class
-Dateien abgelegt werden sollen.-g
: im Debug-Modus übersetzen-verbose
: ausführliche Protokollinfos ausgeben-Xlint
: ausführliche Warnungen zur Übersetzung ausgeben, z.B. veraltete Konstrukte
Beispiel:
javac -g -verbose -D /home/rz_4/ptp/test -classpath /home/scratch/ptp/aufgaben/a1:. TextScanner.java
Übersetze die angegebene Java-Datei im Debug-Modus, suche Quellen und .class-Dateien im/unter dem aktuellen Verzeichnis und dem genannten /home/scratch-Verzeichnis, lege die .class-Dateien unter dem /home/rz_4...-Verzeichnis ab.
Ausführung: java
Syntax: java [options] classname [prog-args]
oder: java [options] -jar jarfile [prog-args]
*
Hinweis: Die zweite (*) Variante funktioniert nur, wenn in der jar-Datei ein Manifest mit Verweis auf die main-Methode vorhanden ist.
Der classname muss voll qualifiziert angeben werden - allerdings ohne Endung .class!
-classpath path
: Liste zu durchsuchender Verzeichnisse, die.class
-Dateien, ZIP- oder JAR-Dateien mit .class-Dateien enthalten. Überschreibt ggf. die CLASSPATH-Umgebungsvariable des Benutzerprozesses; das gilt jedoch nur für die speziellen User- oder Applikationsklassen, die automatisch im System gesuchten Klassen bleiben unberührt.
-cp
kann synonym verwendet werden.-jar jarfile
: ausführbare jar-Datei (s.o.)-version
: gibt die Java-Version aus-ea
: assertions aktivieren-da
: assertions deaktivieren
Beispiel:
java -ea -cp /home/rz_4/ptp/test:. aufgaben.a1.TextScanner input.txt
Führe die angebenen Java-Klasse im package aufgaben.a1 aus, benutze den angeg. classpath, aktiviere ggf. assertions und verwende den Dateinamen input.txt als Programmargument.
Doku generieren: javadoc
Syntax: javadoc [options] [@list] package ... sourcefiles
Mittels dieses Kommandos kann eine ausführliche Darstellung der Schnittstellenbeschreibung wie auch der Interna generiert werden. Es gibt sehr viele Optionen, um Art und Umfang der Infos zu steuern (siehe javadoc -help
). Ein paar Beispiele:
@list
: Optionen können in einer Datei aufgeführt werden-public
: nur public classes und members ausgeben, andere ignorieren-private
: alle classes und members ausgeben-author
: Infos des @author tags ausgaben
Bibliotheken ansehen / erzeugen: jar
Syntax (verkürzt): jar c|t|x[f][e][v] [jar-file] [entry point] [input-files]
Ein JAR-file ist eine gepackte (ZIP) Datei.
c
: create - erzeuge neue Dateit
: content - zeige den Inhalt der Datei anx
: extract - Auspacken der Dateif
: file - nimm den angeg. ersten Dateinamen als jar-Datei statt stdin/oute
: entry point: Klasse mit main-Methode (-> Autostart)v
: verbose - ausführliches Protokoll
Beispiel 1:
jar cf a1.jar aufgaben/a1/MyList.class aufgaben/a1/ListException.class
Erzeuge ein JAR-file aus den Klassen MyList und ListException. Das JAR-file enthält package-Angaben!
Das so erzeugte JAR-file könnte dann z.B. so verwendet werden:
java -cp a1.jar:. aufgaben.a1.TextScanner input.txt
Hier muss die class-Datei in dem (aktuellen) Unterverzeichnis aufgaben/a1 liegen!
Anmerkung: Falls JUnit oder andere Tools genutzt werden sollen, die nicht im Java-Kernbereich zu finden sind, müssen die entsprechenden Libraries (.jar/.zip-Dateien) in den classpath aufgenommen werden, z.B. junit.jar.
!
Beispiel 2:
jar cfev a1.jar aufgaben.a1.MyList aufgaben/a1/
Hier werden alle Dateien(!) im Unterordner aufgaben/a1 ins JAR-File gepackt, der Vorgang wird ausführlich protokolliert. Die Klasse mit der main-Methode (hier: MyList) wird als "Einstiegspunkt" (Main-Class:) in MANIFEST.MF eingetragen. Somit ist ein Start mittels
java -jar a1.jar
möglich.
Hinweise:
Man kann die Datei MANIFEST.MF auch vorbereiten und in die Generierung des JAR-Files einbringen (Option -m ). So ist z.B. die Angabe des CLASSPATHs möglich, falls weitere Bibliotheken benötigt werden, Bsp: Class-Path: lib/junit.jar.
Vorsicht bei der Option -C ! Diese wechselt vor dem Packen in das angebene Verzeichnis und packt dort lokal die Dateien zusammen, d.h. die package-Struktur geht ggf. verloren!
Weitere Infos zum Thema u.a. unter Unix mittels man jar !
Anzeige der API: javap
Syntax: javap [options] classnames
Zeigt in einer für Menschen lesbaren Form die in einem class-File definierte API (Signaturen) an. Ggf. hilfreich, wenn der Quellcode nicht vorhanden/zugreifbar ist.