Ausführbare JAR -Dateien
Eine JAR-Datei enthält eine Sammlung von Klassendateien.
Verwenden einer JAR -Datei als Bibliothek
- Kommandozeilen (Windows)
javac -cp ".;lib.jar" Main.java
java -cp ".;lib.jar" Main
- Kommandozeilen (Linux)
javac -cp ".:lib.jar" Main.java
java -cp ".:lib.jar" Main
zB JFugue:
- Aussprachehinweis
- fugue fjuːg (d)
Main.cmd (Windows)
"C:\Program Files\Java\jdk1.7.0\bin\javac.exe" -cp "jfugue-5.0.1.jar;." Main.java
"C:\Program Files\Java\jdk1.7.0\bin\java.exe" -cp "jfugue-5.0.1.jar;." Main
PAUSE
Main.java
public class Main
{ public static void main( final java.lang.String[] args )
{ new org.jfugue.player.Player().play( "C D E F G A B" ); }}
jre/lib/ext
Klassen und Jar-Dateien können auch in das Verzeichnis »jre/lib/ext« bewegt werden. Dies ist aber fragwürdig, da dort installierte Bibliotheken, dann von allen Programm gefunden werden, auch Programmen, welche durch diese Bibliotheken gestört werden oder andere Versionen dieser Bibliotheken benötigen.
Erzeugen der JAR -Datei
In einem Manifest kann festgelegt werden, welche Klasse beim Starten der JAR-Datei ausgeführt werden soll.
Erzeugen einer ausführbaren JAR -Datei aus Klassen mit Windows -Kommandos:
Main.bat
echo Main-Class: Main>Main.txt
jar cvfm Main.jar Main.txt *.class
Starten einer JAR -Datei auf der Kommmandozeile
Hierbei kann ausgewählt werden von welcher Class die main-Methode gestartet wird.
java -cp Main.jar package.Class
Daneben kann eine ausführbare jar-Datei mit der Option »-jar« auch ohne Angabe einer Klasse mit der Klasse aus dem Manifest gestartet werden
java -jar Main.jar
Starten einer JAR -Datei durch Doppelklicken
Falls ein Programm später durch Doppelklicken gestartetet wird, wird keine Konsole geöffnet. Diese Art des Starts ist daher nur für GUI-Programme (mit JavaFX) sinnvoll.
Die folgende Registrierungsdatei erlaubt es ein JAR-Archiv unter Windows durch Doppelklicken zu öffnen. Sie braucht nur dann zusammengeführt zu werden, wenn Java nicht auf normalem Wege installiert wurde oder die Installation beschädigt ist. Dabei ist der fettgedruckte Pfadteil durch den Pfad zu dem gewünschten Programm »javaw« zu ersetzen. Dabei sind in dem Pfad vorhandene inverse Schrägstriche durch zwei inverse Schrägstriche zu ersetzen, wenn sie in die REGEDIT4 -Datei geschrieben werden sollen.
Solche Registrierungsdateien sollten nur von Personen mit guten Windows -Kenntnissen verwendet werden, da Fehler eine Windows -Installation beschädigen können.
Main.reg
REGEDIT4
[HKEY_CLASSES_ROOT\.jar]
@="jarfile"
[HKEY_CLASSES_ROOT\jarfile]
@="Executable Jar File"
[HKEY_CLASSES_ROOT\jarfile\shell]
[HKEY_CLASSES_ROOT\jarfile\shell\open]
[HKEY_CLASSES_ROOT\jarfile\shell\open\command]
@="\"C:\\Programm Files\\Java\\jre1.8.0\\bin\\javaw.exe\" -jar \"%1\" %*"
Signieren
- »keytool -genkey« erzeugt Schlüsselpaar (öffentlich/privat) in user.home/.keystore
- »keytool -selfcert« zertifiziert
- »jarsigner example.jar mykey« unterzeichnet, »mykey«=default alias für zuvor erzeugten Eintrag
- »jarsigner -verify -certs -verbose example.jar« zur Verifikation,
- (Falls jarsigner sagt "Can't rename", dann könnte dies daran liegen, daß die Datei in Gebrauch ist.)
Bekannte Bibliotheken
JUnit Unit-Tests
Log4J Logging
SWT Graphische Benutzeroberfläche (von Eclipse), Alternative zu JavaFX
iText PDF-Manipulation
Hibernate Datenbankzugriffe mit O/R-Verbindung
Apache Jakarta Commons Diverses
Derby Datenbank (gehört zum JDK, aber nicht zum JRE)
POI MS-Office-Datei-Zugriffe
Guave Behälter für elementare Typen
AntLR Parsing
TagSoup/JSoup Fehlertolerante HTML/XML-Parser
XStream POJO-XML-Serialisierung und -Deserialisierung
Bouncycastle Verschlüsselung
Spring, Struts, Tapestry, JGoodies, hsqldb, dbo4 (O/R), Joda-Time, Lucene / Apache Tika / Apache Solr (fulltext), JFreeCharts / charts4J / JGraph, SwingX, Jetty (server), JDOM/DOM4J, Selenium, JAI (images), Velocity (templating), jXLS (templating), ASM / CGLIB / bcel, Jackson (JSON), httpclient / Flying Saucer, JHotDraw, BeanShell, Batik, Castor, Torque, … http://jarfiles.pandaidea.com/list
Einige andere Bibliotheken
libGDX
Repositories (Maven und Gradle)
Maven und Gradle sind Programme zum Erstellen von Java-Anwendungen mit verschiedenen Bibliotheken.
Sie verwenden Sammlungen (repositories) von Bibliotheken in verschiedenen Versionen auf Rechnern mit Internetzugang, so daß beim Erstellen eines Programms, die benötigen Bibliotheken automatisch abgerufen werden können.
Vorteile:
- Während CMD-Dateien Windows-spezifisch sind, sind Maven und Gradle unabhängig von der verwendeten Plattform
Eventuelle Probleme:
- Programme, die gleichzeitig auf die Festplatte und das Internet zugreifen können, sind ein potentielles Sicherheitsrisiko.
- Zusätzlich zu Java, müssen noch andere Sprachen (wie beispielsweise eine Gradle-DSL) erlernt werden, um diese Programm zu steuern
Kritik an Bibliotheken („APIs“)
- Jede Abhängigkeit eines Programms von einer Bibliothek bedeutet ein zusätzliches Risiko
- Manchmal werden Bibliotheken nicht mehr weitergepflegt
- Manchmal sind die Lizenzbedingungen einschränkend
- Manchmal enthalten Bibliotheken Fehler oder Sicherheitslücken
- Manchmal ist es schwieriger, die Verwendung einer Bibliothek zu erlernen, als einen Programmteil ohne Verwendung der Bibliothek zu schreiben
Übungsaufgaben
Falls Sie mit Eclipse arbeiten: Können Sie herausfinden, wie Sie ein jar-Archive unter Eclipse verwenden können?
Pfad zur ausgeführten Jar-Datei *
new java.io.File
( SomeClassInTheJar.class.getProtectionDomain()
.getCodeSource()
.getLocation()
.getPath() ).getName()