**This is an old revision of the document!**
Java Bibliotheken
javac Pythagoras.java
Mode LastWriteTime Length Name ---- -a---l 19.01.2025 13:24 216 Greeter.java -a---l 19.01.2025 13:38 43 JarAblauf.md -a---l 19.01.2025 13:24 283 Main.java -a---l 19.01.2025 13:38 453 Pythagoras.class -a---l 19.01.2025 13:38 370 Pythagoras.java
cat Pythogoras.class
javap -c Pythagoras
Was nicht klappt: java Pythagoras Fehler: Hauptmethode in Klasse Pythagoras nicht gefunden. Definieren Sie die Hauptmethode als: public static void main(String[] args): oder eine JavaFX-Anwendung muss javafx.application.Application erweitern
Es fehlt eine main - also schnell Main.java kompilieren
javac Main.java Mode LastWriteTime Length Name ---- -a---l 19.01.2025 13:48 915 Greeter.class -a---l 19.01.2025 13:24 216 Greeter.java -a---l 19.01.2025 13:38 43 JarAblauf.md -a---l 19.01.2025 13:48 643 Main.class -a---l 19.01.2025 13:48 285 Main.java -a---l 19.01.2025 13:38 453 Pythagoras.class -a---l 19.01.2025 13:38 370 Pythagoras.java
- Auch
Greeeter.classist mitkompiliert worden! - Aber
Pythagoras.classist NICHT nochmal kompiliert worden (s. Zeitstempel)
Was, wenn einige Dateien nicht als .java vorliegen?
mkdir temp mv Pythagoras.java temp mv Greeter.java temp rm Main.class javac Main.java Mode LastWriteTime Length Name ---- dar--l 19.01.2025 13:58 temp -a---l 19.01.2025 13:48 915 Greeter.class -a---l 19.01.2025 13:57 1778 JarAblauf.md -a---l 19.01.2025 13:48 285 Main.java -a---l 19.01.2025 13:38 453 Pythagoras.class
Kompilieren ist trotzdem moeglich!
Kompiler ist sogar happy ueber bereits fertig kompilierte Klassen.
javac Main.java Mode LastWriteTime Length Name ---- dar--l 19.01.2025 13:58 temp -a---l 19.01.2025 13:48 915 Greeter.class -a---l 19.01.2025 13:57 1778 JarAblauf.md -a---l 19.01.2025 13:59 643 Main.class -a---l 19.01.2025 13:48 285 Main.java -a---l 19.01.2025 13:38 453 Pythagoras.class
Das ist sogar der Klassiker: Man schreibt eigenen Java-Code, der von bereits fertig kompilierten Klassen abhaengig ist
Meist liegen diese fertigen Dateien irgendwo, bsp im Ordner classes
rm Main.class mkdir classes mv *.class classes
Aber jetzt funktioniert folgender Code nicht mehr, weil die Klassen nicht gefunden werden.
javac Main.java
Deshalb muss ich dem Kompiler erstmal sagen, wo sich die Klassendateien befinden. Hierfuer benutzt man die -cp Option (**Class Path).
>>javac -cp classes Main.java
Aber man kann es immer noch nicht ausfuehren!
>>java Main
Es muss auch hier wieder der classPath angegeben werden…
>>java -cp classes Main Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main
… und der classPath muss angepasst werden und durch . um das aktuelle Verzeichnis erweitert werden.
>>java -cp ".;classes" Main 5.0 4.76837158203125 Donald says: Hello World
Classfiles im Archiv .jar (java archive)
Classfiles werden meist nicht einzeln verteilt, sondern gepackt als Archiv.
>>cd classes ... jar cvf library.jar *.class Manifest wurde hinzugefügt Greeter.class wird hinzugefügt(ein = 915) (aus = 498)(45 % verkleinert) Pythagoras.class wird hinzugefügt(ein = 453) (aus = 323)(28 % verkleinert) ... Mode LastWriteTime Length Name >> > ---- -a---l 19.01.2025 13:48 915 Greeter.class -a---l 19.01.2025 14:28 1386 library.jar -a---l 19.01.2025 13:38 453 Pythagoras.class
Mit jar tvf kann man auch in ein .jar hineingucken.
>>jar tvf .\library.jar 0 Sun Jan 19 14:28:38 CET 2025 META-INF/ 66 Sun Jan 19 14:28:38 CET 2025 META-INF/MANIFEST.MF 915 Sun Jan 19 13:48:16 CET 2025 Greeter.class 453 Sun Jan 19 13:38:28 CET 2025 Pythagoras.class
Wir koennen jetzt auch alle .class-files loeschen und trotzdem wird der Compiler funktionieren:
rm //.class cd .. rm //.class >>javac -cp classes\library.jar Main.java >> > >>java -cp ".;classes\library.jar" Main >> > 5.0 4.76837158203125 Donald says: Hello World