jar-Bibliotheken

**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.class ist mitkompiliert worden!
  • Aber Pythagoras.class ist 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 </code>