Erweiterte Suche

Howto: @pre, @post und @inv Tags in Javadoc

Man kann mit Javadoc eigene Tags definieren. Eine genaue Beschreibung findet sich hier. Auf dieser Seite folgt ein kurzes Howto, wie man @pre, @post und @inv Tags zu javadoc hinzufügt, einmal in der einfachen Variante und einmal in einer verbesserten Variante mit Taglets. Zum Schluss wird noch kurz gesagt, wie man das Generieren der Javadoc aus Netbeans, Eclipse, Maven und Ant heraus einrichten kann.

Einfache Variante

Am einfachsten definiert man die Tags mit der -tag Option auf der Kommandozeile von javadoc:
  -tag pre:cm:"Preconditions:"
  -tag post:cm:"Postconditions:"
  -tag inv:t:"Invariants:"
  -encoding "utf-8"
  -charset "utf-8"
  -docencoding "utf-8"
Die Struktur -tag X:Y:Z bedeutet hierbei:
X: Der Name des Tags im Programmcode ohne das @. Zum Beispiel pre:Y:Z bedeutet die Definition von @pre im Code.
Y: Dieser Parameter gibt an, an welcher Stelle sich der Tag im Code befinden darf. Pre- und Postconditions zum Beispiel nur(!) in Konstruktoren(c) und Methoden(m). Invarianten hingegen nur in Klassendefinitionen(t). Eine Liste alle Parameter ist hier zu finden.
Z: Der Name in dem erstellten Javadoc.
Die -encoding/-charset/-docencoding Option ist wichtig, wenn ihr deutsche Kommentare mit Umlauten etc. schreibt, und Javadoc das default-encoding falsch erkennt. Hier müsst ihr dann die richtige Kodierung eintragen (utf-8 oder iso-8859-1).

Dann kann man im javadoc-Kommentar z.Bsp. schreiben:
/**
 * Klasse zum Verwalten von Benutzern
 * @inv Alle dem System bekannten Benutzer haben ein nicht leeres Passwort
 * @inv Alle dem System bekannten Benutzer haben paarweise verschiedene Anmeldenamen
 * @author plamm_01
 *
 */
 public class UserManager {
    /**
    * Fügt einen Benutzer hinzu
    * @param login Anmeldename des Benutzers
    * @param pwd Passwort des Benutzers
    * @pre Der Anmeldename ist noch nicht vergeben
    * @pre Das Passwort ist nicht leer
    * @post Der Benutzer ist dem System bekannt
    */
    public void addUser(String login, String pwd) { ... }

    ...
  }
Um die Invarianten und Vor-/Nachbedingungen schöner zu formatieren, kann man auch eigene Taglets benutzen:

Mit Taglets

Man lädt die Datei cbs_taglets.jar herunter, am besten in sein Home-Verzeichnis oder C:\ unter Windows. Dann gibt man die folgenden Kommandozeilenoptionen an
-taglet PreTaglet
-taglet PostTaglet
-taglet InvTaglet
-tagletpath "/u/plamm_01/WWW/sopra/cbs_taglets.jar"
Wobei man tagletpath entsprechend anpassen muss, z.Bsp.
-tagletpath "C:\cbs_taglets.jar"

Nun sind die Invarianten und Vor-/Nachbedingungen in der generierten Dokumentation schöner formatiert.

Anmerkung: Man kann auf diese Weise die Formatierung im Javadoc beliebig anpassen. Leider ist die cbs_taglets.jar Datei etwas veraltet und sieht nicht mehr "schöner" aus.

Integration in Netbeans

In Netbeans kann man die Javadoc mit dem Menupunkt Run->Generate Javadoc generieren. Der Menupunkt File->Project Properties öffnet einen Dialog. Dort findet man unter Build/Documenting die Einstellungen für Javadoc. Im Feld Additional Javadoc Options kann man die zusätzlichen -tag bzw. -taglet und -tagletpath Parameter eintragen.

Integration in Eclipse

Um die Dokumentation direkt aus eclipse zu generieren, gibt es den Menupunkt Project->Generate Javadoc. Dort kann man im dritten Schritt unter Extra Javadoc Options die zusätzlichen -tag bzw. -taglet und -tagletpath Parameter eintragen. Diese wird eclipse dann als Standardeinstellung für das Projekt verwenden.

Integration in Maven

Die Integration in Maven läuft über Plugins so:
    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.10.1</version>
        <configuration>
            <tags>
                <tag>
                    <name>pre</name>
                    <placement>mc</placement>
                    <head>Preconditions:</head>
                </tag>
                <tag>
                    <name>post</name>
                    <placement>mc</placement>
                    <head>Postconditions:</head>
                </tag>
                <tag>
                    <name>inv</name>
                    <placement>t</placement>
                    <head>Invariants:</head>
                </tag>
            </tags>
        </configuration>
    </plugin>
    ...
bzw.
    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.10.1</version>
        <configuration>
            <additionalJOptions>
                <additionalJOption>-taglet PreTaglet </additionalJOption>
                <additionalJOption>-taglet PostTaglet </additionalJOption>
                <additionalJOption>-taglet InvTaglet </additionalJOption>
                <additionalJOption>-tagletpath /u/plamm_01/cbs_taglets.jar </additionalJOption>
            </additionalJOptions>
        </configuration>
    </plugin>
    ...

Integration in Ant

Die Integration in Ant sieht so aus:
    <property name="src.dir"     value="src"/>              <!-- Source Verzeichnis -->
    <property name="build.dir"   value="build"/>            <!-- Build Verzeichnis -->
    <property name="doc.dir"     value="${build.dir}/doc"/> <!-- Javadoc Verzeichnis -->
    <property name="lib.dir"     value="lib"/>              <!-- Externe Libraries -->
    <path id="classpath">                                   <!-- Pfad zu externen jar-Files -->
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>
    <!-- Target zum erzeugen von Dokumentation -->
    <target name="doc" description="Erzeugung von Javadoc.">
        <mkdir dir="${doc.dir}"/>
        <javadoc sourcepath="${src.dir}" destdir="${doc.dir}" classpathref="classpath" 
                 encoding="utf-8" charset="utf-8" docencoding="utf-8">
            <tag name="pre" description="Preconditions:" scope="methods,constructors"/>
            <tag name="post" description="Postconditions:" scope="methods,constructors"/>
            <tag name="inv" description="Invariants:" scope="types"/>
       <!-- <taglet name="PreTaglet" path="${lib.dir}/cbs_taglets.jar" />
            <taglet name="PostTaglet" path="${lib.dir}/cbs_taglets.jar" />
            <taglet name="InvTaglet" path="${lib.dir}/cbs_taglets.jar" /> -->
        </javadoc>
    </target>


Impressum 2017| Datenschutzhinweis| | © 2007 FB10 WWU Münster
Universität Münster
Schlossplatz 2 - 48149 Münster
Tel.: +49 (251) 83-0 - Fax: +49 (251) 83-3 20 90
E-Mail: