6.11. Benutzung von Java

6.11.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/jdk16.

Tabelle 6.14. Variablen, die von Ports, die Java benutzen, gesetzt werden müssen
VariableBedeutung
USE_JAVASollte definiert sein, damit die übrigen Variablen irgendeinen Effekt haben.
JAVA_VERSIONDurch 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.5[+] 1.6[+] 1.7[+]).
JAVA_OSDurch Leerzeichen getrennte Liste von geeigneten JDK-Port-Betriebssystemen für den Port. (erlaubte Werte: native linux).
JAVA_VENDORDurch Leerzeichen getrennte Liste von geeigneten JDK-Port-Anbietern für den Port. (erlaubte Werte: freebsd bsdjava sun openjdk).
JAVA_BUILDBedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Build-Abhängigkeiten des Ports hinzugefügt werden soll.
JAVA_RUNBedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Laufzeit-Abhängigkeiten des Ports hinzugefügt werden soll.
JAVA_EXTRACTBedeutet, falls gesetzt, dass der ausgewählte JDK-Port zu den Extract-Abhängigkeiten des Ports hinzugefügt werden soll.

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

Tabelle 6.15. Bereitgestellte Variablen für Ports, die Java benutzen
VariableWert
JAVA_PORTDer Name des JDK-Ports (z.B. 'java/diablo-jdk16').
JAVA_PORT_VERSIONDie volle Version des JDK Ports (z.B. '1.6.0'). 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_OSDas vom JDK-Port benutzte Betriebssystem (z.B. 'native').
JAVA_PORT_VENDORDer Anbieter des JDK-Ports (z.B. 'freebsd').
JAVA_PORT_OS_DESCRIPTIONBeschreibung des vom JDK-Port benutzten Betriebssystems (z.B. 'Native').
JAVA_PORT_VENDOR_DESCRIPTIONBeschreibung des Anbieters des JDK-Ports (z.B. 'FreeBSD Foundation').
JAVA_HOMEPfad zum Installationsverzeichnis des JDK (z.B. '/usr/local/diablo-jdk1.6.0').
JAVACPfad zum Java-Compiler, der benutzt werden soll (z.B. '/usr/local/diablo-jdk1.6.0/bin/javac'.
JARPfad zum jar-Werkzeug, das benutzt werden soll (z.B.''/usr/local/diablo-jdk1.6.0/bin/jar oder '/usr/local/bin/fastjar').
APPLETVIEWERPfad zum appletviewer-Werkzeug (z.B. '/usr/local/diablo-jdk1.6.0/bin/appletviewer').
JAVAPfad zur java Binärdatei. Benutzen Sie dies, um Java-Programme auszuführen (z.B.'/usr/local/diablo-jdk1.6.0/bin/java').
JAVADOCPfad zum javadoc-Werkzeug.
JAVAHPfad zum javah-Programm.
JAVAPPfad zum javap-Programm.
JAVA_KEYTOOLPfad zum keytool-Werkzeug.
JAVA_N2APfad zum native2ascii-Werkzeug.
JAVA_POLICYTOOLPfad zum policytool Programm.
JAVA_SERIALVERPfad zum serialver-Werkzeug.
RMICPfad zum RMI Stub/Skeleton-Generator, rmic.
RMIREGISTRYPfad zum RMI Registry-Werkzeug, rmiregistry.
RMIDPfad zum RMI Daemon rmid.
JAVA_CLASSESPfad zum Archiv, das die JDK-Klassendateien enthält, ${JAVA_HOME}/jre/lib/rt.jar.

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.16. Konstanten, die für Ports, welche Java benutzen, definiert sind
KonstanteWert
JAVASHAREDIRDas Basis-Verzeichnis für alles, was mit Java zusammenhängt. Standardmäßig ${PREFIX}/share/java.
JAVAJARDIRDas Verzeichnis, wohin JAR-Dateien installiert werden sollen. Standardmäßig ${JAVASHAREDIR}/classes.
JAVALIBDIRDas 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, „Änderungen an pkg-plist mit Hilfe von make-Variablen“) als auch in SUB_LIST definiert.

6.11.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_TARGET aufruft. Das ähnelt dem USE_GMAKE-Mechanismus, der in Abschnitt 6.3, „Build-Mechanismen“ dokumentiert ist.

6.11.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, „Änderungen an pkg-plist mit Hilfe von make-Variablen“) 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, „Kategorisierung“ erklärt wird.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.