Das FreeBSD Porter-Handbuch
Zurück | Kapitel 6. Besonderheiten | Weiter

# 6.10. Benutzung von Java

## 6.10.1. Variablen-Definitionen

Wenn Ihr Port ein Java™ Development Kit (JDK) benötigt, entweder zum Bauen, zur Laufzeit oder sogar, um das Distfile auszupacken, dann sollten Sie `USE_JAVA` setzen.

Es gibt mehrere JDKs in der Ports-Sammlung- von verschiedenen Anbietern und in verschiedenen Versionen. Wenn Ihr Port eine bestimmte dieser Versionen benötigt, können Sie definieren welche. Die aktuelle Version ist `java/jdk15`.

Tabelle 6-13. Variablen, die von Ports, die Java benutzen, gesetzt werden müssen

Variable | Bedeutung
--- | ---
`USE_JAVA` | Sollte definiert sein, damit die übrigen Variablen irgendeinen Effekt haben.
`JAVA_VERSION` | Durch Leerzeichen getrennte Liste von geeigneten Java-Versionen für den Port. Ein optionales `"+"` ermöglicht die Angabe eines Bereiches von Versionen (mögliche Werte: `1.1[+] 1.2[+] 1.3[+] 1.4[+]`).
`JAVA_OS` | Durch Leerzeichen getrennte Liste von geeigneten JDK-Port-Betriebssystemen für den Port. (erlaubte Werte: `native linux`).
`JAVA_VENDOR` | Durch Leerzeichen getrennte Liste von geeigneten JDK-Port-Anbietern für den Port. (erlaubte Werte: `freebsd bsdjava sun ibm blackdown`).
`JAVA_BUILD` | Bedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Build-Abhängigkeiten des Ports hinzugefügt werden soll.
`JAVA_RUN` | Bedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Laufzeit-Abhängigkeiten des Ports hinzugefügt werden soll.
`JAVA_EXTRACT` | Bedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Extract-Abhängigkeiten des Ports hinzugefügt werden soll.

`USE_JIKES`

Legt fest, ob der Port den `jikes` Bytecode-Compiler zum Kompilieren benutzen soll. Wenn kein Wert für diese Variable gesetzt ist, wird der Port `jikes` für die Kompilierung benutzen- falls vorhanden. Sie können die Benutzung von `jikes` auch ausdrücklich verbieten oder erzwingen (durch Setzen auf `'no'` oder `'yes'`). Im letzteren Fall wird `devel/jikes` zu den Build-Abhängigkeiten des Ports hinzugefügt. In jedem Fall wird, wenn `jikes` tatsächlich statt `javac` zur Kompilierung benutzt wird, die Variable `HAVE_JIKES` von `bsd.java.mk` definiert.

Das Folgende ist eine Liste aller Variablen, die ein Port bekommt, nachdem er `USE_JAVA` gesetzt hat:

Tabelle 6-14. Bereitgestellte Variablen für Ports, die Java benutzen

Variable | Wert
--- | ---
`JAVA_PORT` | Der Name des JDK-Ports (z.B. `'java/jdk14'`).
`JAVA_PORT_VERSION` | Die volle Version des JDK Ports (z.B. `'1.4.2'`). Wenn Sie nur die ersten beiden Stellen dieser Versionsnummer benötigen, benutzen Sie `${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}`.
`JAVA_PORT_OS` | Das vom JDK-Port benutzte Betriebssystem (z.B. `'linux'`).
`JAVA_PORT_VENDOR` | Der Anbieter des JDK-Ports (z.B. `'sun'`).
`JAVA_PORT_OS_DESCRIPTION` | Beschreibung des vom JDK-Port benutzten Betriebssystems (z.B. `'Linux'`).
`JAVA_PORT_VENDOR_DESCRIPTION` | Beschreibung des Anbieters des JDK-Ports (z.B. `'FreeBSD Foundation'`).
`JAVA_HOME` | Pfad zum Installationsverzeichnis des JDK (z.B. `'/usr/local/jdk1.3.1'`).
`JAVAC` | Pfad zum Java-Compiler, der benutzt werden soll (z.B. `'/usr/local/jdk1.1.8/bin/javac'` oder `'/usr/local/bin/jikes'`).
`JAR` | Pfad zum `jar`-Werkzeug, das benutzt werden soll (z.B. `'/usr/local/jdk1.2.2/bin/jar'` oder `'/usr/local/bin/fastjar'`).
`APPLETVIEWER` | Pfad zum `appletviewer`-Werkzeug (z.B. `'/usr/local/linux-jdk1.2.2/bin/appletviewer'`).
`JAVA` | Pfad zur `java` Binärdatei. Benutzen Sie dies, um Java-Programme auszuführen (z.B. `'/usr/local/jdk1.3.1/bin/java'`).
`JAVADOC` | Pfad zum `javadoc`-Werkzeug.
`JAVAH` | Pfad zum `javah`-Programm.
`JAVAP` | Pfad zum `javap`-Programm.
`JAVA_KEYTOOL` | Pfad zum `keytool`-Werkzeug. Diese Variable ist nur verfügbar, wenn das JDK Java 1.2 oder höher ist.
`JAVA_N2A` | Pfad zum `native2ascii`-Werkzeug.
`JAVA_POLICYTOOL` | Pfad zum `policytool` Programm. Diese Variable ist nur verfügbar, wenn das JDK Java 1.2 oder höher ist.
`JAVA_SERIALVER` | Pfad zum `serialver`-Werkzeug.
`RMIC` | Pfad zum RMI Stub/Skeleton-Generator, `rmic`.
`RMIREGISTRY` | Pfad zum RMI Registry-Werkzeug, `rmiregistry`.
`RMID` | Pfad zum RMI Daemon `rmid`. Diese Variable ist nur verfügbar, wenn das JDK Java 1.2 oder höher unterstützt.
`JAVA_CLASSES` | Pfad zum Archiv, das die JDK-Klassendateien enthält. Für das JDK 1.2 oder später ist dies `${JAVA_HOME}/jre/lib/rt.jar`. Frühere JDKs benutzten `${JAVA_HOME}/lib/classes.zip`.
`HAVE_JIKES` | Ist dann gesetzt, wenn `jikes` vom Port benutzt wird (s. `USE_JIKES` oben).

Sie können das `java-debug` make-Target benutzen, um Information zum Debuggen Ihres Ports zu erhalten. Es wird die Werte vieler der obenangegebenen Variablen anzeigen.

Zusätzlich sind die folgenden Konstanten definiert, damit alle Java-Ports auf eine konsistente Art installiert werden können:

Tabelle 6-15. Konstanten, die für Ports, welche Java benutzen, definiert sind

Konstante | Wert
--- | ---
`JAVASHAREDIR` | Das Basis-Verzeichnis für alles, was mit Java zusammenhängt. Standardmäßig `${PREFIX}/share/java`.
`JAVAJARDIR` | Das Verzeichnis, wohin JAR-Dateien installiert werden sollen. Standardmäßig `${JAVASHAREDIR}/classes`.
`JAVALIBDIR` | Das Verzeichnis, in dem JAR-Dateien, die von anderen Ports installiert wurden, liegen. Standardmäßig `${LOCALBASE}/share/java/classes`.

Die entsprechenden Einträge sind sowohl in `PLIST_SUB` (dokumentiert in Abschnitt 7.1) als auch in `SUB_LIST` definiert.

## 6.10.2. Kompilieren mit Ant

Wenn der Port mit Apache Ant kompiliert werden soll, muss er `USE_ANT` setzen. Ant wird dann als das sub-make-Kommando betrachtet. Wenn kein `do-build`-Target vom Port definiert ist, wird eine Standardvorgabe benutzt, die einfach Ant entsprechend `MAKE_ENV`, `MAKE_ARGS` und `ALL_TARGETS` aufruft. Das ähnelt dem `USE_GMAKE`-Mechanismus, der in Abschnitt 6.3 dokumentiert ist.

Wenn `jikes` anstelle von `javac` benutzt wird (siehe `USE_JIKES` in Abschnitt 6.10.1), dann wird Ant es automatisch benutzen, um den Port zu kompilieren.

## 6.10.3. Optimales Verfahren

Wenn Sie eine Java-Bibliothek portieren, sollte Ihr Port die JAR-Datei(en) in `${JAVAJARDIR}` installieren, und alles andere unter `${JAVASHAREDIR}/${PORTNAME}` (ausgenommen die Dokumentation - siehe unten). Um die Größe der Packlistendatei zu reduzieren, können die JAR-Datei(en) direkt im `Makefile` angegeben werden. Benutzen Sie einfach die folgende Anweisung (wobei `myport.jar` der Name der JAR-Datei ist, die als Teil des Ports installiert wird):

    PLIST_FILES+= %%JAVAJARDIR%%/myport.jar

Beim Portieren einer Java-Applikation installiert der Port normalerweise alles unter einem einzigen Verzeichnis (inklusive seiner JAR-Abhängigkeiten). Die Benutzung von `${JAVASHAREDIR}/${PORTNAME}` wird in dieser Beziehung dringend empfohlen. Es liegt im Entscheidungsbereich des Portierenden, ob der Port die zusätzlichen JAR-Abhängigkeiten unter diesem Verzeichnis installieren oder direkt die schon installierten (aus `${JAVAJARDIR}`) benutzen soll.

Unabhängig von der Art Ihres Ports (Bibliothek oder Applikation), sollte die zusätzliche Dokumentation an die gleiche Stelle installiert werden wie bei jedem anderen Port auch. Das JavaDoc-Werkzeug ist dafür bekannt einen unterschiedlichen Satz von Dateien abhängig von der Version des benutzten JDKs zu erstellen. Für Ports, die nicht die Benutzung eines bestimmten JDKs vorgeben, ist es deshalb eine komplexe Aufgabe die Packliste (`pkg-plist`) festzulegen. Dies ist ein Grund, warum dringend angeraten wird, das `PORTDOCS`-Makro zu benutzen. Außerdem, selbst wenn Sie den Satz von Dateien, den `javadoc` erzeugen wird, voraussagen können, die Größe der resultierenden `pkg-plist` befürwortet die Benutzung von `PORTDOCS`.

Der Vorgabewert für `DATADIR` ist `${PREFIX}/share/${PORTNAME}`. Es ist eine gute Idee, `DATADIR` für Java-Ports stattdessen auf `${JAVASHAREDIR}/${PORTNAME}` zu setzen. In der Tat wird `DATADIR` automatisch zu `PLIST_SUB` (dokumentiert in Abschnitt 7.1) hinzugefügt, d.h. Sie können `%%DATADIR%%` direkt in `pkg-plist` benutzen.

Zu der Frage, ob Java-Ports aus dem Quelltext gebaut werden, oder direkt bereitgestellte binäre Distributionen benutzt werden sollten, gab es, als dies geschrieben wurde, keine definierte Richtlinie. Allerdings ermutigen Mitglieder des FreeBSD Java-Projekts Porter dazu, Ihre Ports aus dem Quelltext kompilieren zu lassen, wann immer dies kein Problem darstellt.

Alle Eigenschaften, die in diesem Abschnitt präsentiert wurden sind in `bsd.java.mk` implementiert. Sollten Sie jemals der Meinung sein, dass Ihr Port ausgefeiltere Java-Unterstützung benötigt, schauen Sie bitte erst in das bsd.java.mk CVS Log, weil es normalerweise immer etwas Zeit braucht bis die neuesten Eigenschaften dokumentiert sind. Wenn Sie glauben, dass der fehlende Support auch für viele andere Java Ports nützlich sein könnte, wenden Sie sich bitte an die FreeBSD Java Language.

Obwohl es eine `java`-Kategorie für Fehlerberichte gibt, bezieht sich diese auf die JDK-Portierungsbemühungen des FreeBSD Java-Projektes. Deshalb sollten Sie Ihren Java-Port in der `ports`-Kategorie einreichen wie bei jeden anderen Port auch - es sei denn, die Angelegenheit, die Sie zu klären versuchen, steht in Zusammenhang entweder mit einer JDK-Implementierung oder `bsd.java.mk`.

Gleichermaßen gibt es eine definierte Richtlinie für die `CATEGORIES` eines Java-Ports, die in Abschnitt 5.3 erklärt wird.

Zurück | Zum Anfang | Weiter
Benutzung von KDE | Nach oben | Webanwendungen, Apache und PHP

Fragen zum FreeBSD Ports-System richten Sie bitte an <ports@FreeBSD.org>, Fragen zu diesem Dokument hingegen an <de-bsd-translators@de.FreeBSD.org>.