2.12 Packages & eigene Library

Einleitung

In unseren bisherigen Beispielen haben wir uns noch nicht darum gekümmert, unsere Klassen in Packages aufzuteilen. Offen gestanden war dies nicht besonders elegant. Allerdings erkennt man meiner Erfahrung nach den Vorteil von Packages erst, wenn man mit aufwändigeren Programmen arbeitet und zuvor erstellte Klassen in neuen Projekten wiederverwenden möchte. Daher sehen wir uns dies erst jetzt an.

Was ist eigentlich ein Package?

Wenn Du auf Deinem Rechner Java installiert hast, hast Du damit auch die Standardbibliothek von Java installiert. Das ist eine riesige Ansammlung von vorgefertigten Klassen, die Du jederzeit in ein neues Programm einbinden kannst. Um diese Bibliothek zu strukturieren, sind die Klassen in verschiedene Pakete („Packages“) unterteilt. Diese können sogar wiederum in Unterpakete aufgeteilt sein. Einen Überblick über die verfügbaren Pakete findest Du hier in der Dokumentation von Java 8.

An einigen Stellen haben wir bereits auf Packages der Standardbibliothek. Das ist immer daran erkennbar, dass in in diesen Fällen in der obersten Zeile eine import-Anweisung steht. Hier ein Beispiel dazu:

import java.util.Random;

public class ImportBeispiel {

  public static void main(String[] args) {

    Random meinGenerator = new Random();

    System.out.println(meinGenerator.nextInt(100));

  }

}

In diesem Fall wurde die Klasse Random aus dem Paket java.util importiert. Diese Klasse können wir daher so verwenden, als wäre sie ein Teil unseres eigenen Projekts.

Erstellen einer eigenen Bibliothek

Export

Pakete bruchrechnung und geoemetrie mit einigen Klassen
Aufteilung unserer Klassen in zwei Pakete

Um eine eigene Bibliothek zu erstellen, können wir einfach ein paar Klassen aus früheren Beispielen in ein neues Projekt kopieren und wie in der Abbildung in zwei Packages aufteilen.

Im Paket geometrie verwenden wir die Beispiele aus der Lektion zu abstrakten Klassen. In bruchrechnung die aus dem Anwendungsbeispiel Bruchrechnung.
Solltest Du nicht mehr genau wissen, was diese Klassen leisten, ist das nicht schlimm. Es geht nur darum, dass wir ein paar Beispiele zur Verfügung stehen haben.

Wenn wir diese Klassen in einem anderen Projekt erneut verwenden wollen oder diese jemandem zur weitere Verwendung zu Verfügung stellen möchten, sollten wir unser Projekt als eine JAR-Datei (JAR steht für „Java Archive“) exportieren.

In Eclipse klicken wir dazu im mit der rechten Maustaste auf den Namen unseres Projekts und dann auf Export. Wir gelangen damit zu diesem Menü:

Export-Dialog in Eclipse
Export-Dialog in Eclipse

Dort wählen wir im Ordner Java den Unterpunkt JAR file. Im dann folgenden Dialog müssen wir angeben, welche Packages aus welchen Projekten wir exportieren wollen. Da wir zu Beginn schon den Namen unseres Projekts angeklickt haben, ist schon das richtige Projekt ausgewählt.

Dialog zur JAR-Datei
Hier geben wir an, was exportiert werden soll.

Außerdem müssen wir angeben, wo die fertige Datei gespeichert werden soll. Die anderen beiden Haken können wir so setzen wie in der Abbildung. Danach klicken wir auf Finish.

Die JAR-Datei ist nun fertig und kann in neue Projekte eingebunden werden und auch an andere Programmierer weitergegeben werden.

Einbinden in neues Projekt

Nun können wir ein neues Projekt erstellen. Danach klicken wir mit der rechten Maustaste auf dessen Namen und wählen den Punkt Properties.

Eigenschaften unseres Projekts
Eigenschaften unseres Projekts

Im nun geöffneten Dialog klicken wir links auf Java Build Path und wählen den Reiter Libraries. Rechts erscheint der Button Add External JARs, den wir klicken. Nun müssen wir nur noch die eben erstelle JAR-Datei auswählen und OK klicken.

Auf dieselbe Weise könnten wir natürlich auch andere Bibliotheken einbinden, die nicht von uns selbst erstellt wurden.

Verwendung einer eingebundenen Bibliothek

Nun macht es für uns keinen Unterschied mehr, ob wir eine Klasse der Standardbibliothek oder der neu eingebundenen Bibliothek verwenden wollen. Beides gelingt uns mit einer import-Anweisung:

import java.util.Random;

import bruchrechnung.Bruch;


public class Demo {

  public static void main(String[] args) {
    
    Random meinGenerator = new Random();
    
    Bruch meinBruch = new Bruch (meinGenerator.nextInt(100), 1+meinGenerator.nextInt(100));
    System.out.println(meinBruch);

  }

}