Wie verlinkt man zu einer _package description_ (nicht Klasse) im Javadoc?

9

(Nein, das ist kein Duplikat, siehe unten)

Für das, was es wert ist, ist dies Oracle JDK, 7u72.

Ich kann es nicht schaffen, mich mit der Paketbeschreibung zu verbinden, obwohl ich das tun muss, da dort wichtige Informationen erwähnt werden, aber ich schaffe es nicht jedes Mal; Wenn ich probiere {@link my.package.name} oder sage den Leuten zu gehen und @see my.package.name (oder sogar einen Link zu einer Paketbeschreibung einer externen Bibliothek), meldet das javadoc-Tool, dass es den Link nicht finden kann ...

Also, wie mache ich solche Links?

OK, also, es wird gesagt, dass hier die Antwort ist, aber nein :

  • die vorgeschlagene Lösung funktioniert nur für Pakete innerhalb Ihres eigenen Codes; Ich möchte mit der Paketbeschreibung von anderen Bibliotheken verlinken können;
  • Ich möchte, dass solche Links auch in package-info.java und "plain" -Klasse Javadoc gültig sind.

Also, das ist kein Duplikat.

    
fge 13.12.2014, 19:17
quelle

1 Antwort

2

Es ist nicht so einfach wie die Verwendung der {@link package.class#member} -Tagsyntax, aber Sie können eine Verknüpfung zur Paketdokumentation herstellen, indem Sie das direkte <a href="..."> HTML-Markup verwenden. Der Schlüssel ist, den richtigen URI zu kennen, der in das href -Attribut eingefügt werden soll.

Javadoc gibt Dateien in einer Verzeichnisstruktur aus entspricht Ihrer Paketstruktur. Für jedes Paket ist seine Beschreibung immer in einer Datei namens package-summary.html enthalten, die sich im entsprechenden Verzeichnis befindet. Der eigentliche Beschreibungstext befindet sich an oder in der Nähe eines bestimmten Ankers, der je nach Doclet-Version variiert. Der Ankername kann als Fragment-ID an einen der folgenden URIs angehängt werden, wenn Sie direkt zum Beschreibungshauptteil springen möchten anstelle der Oberseite der Paketseite.

  • In Java 7 wurde der Paketbeschreibungsanker als description bezeichnet und als Fragmentbezeichner #description .
  • dargestellt
  • In Java 8 wurde der Anker in package.description umbenannt, dargestellt als Fragmentbezeichner #package.description .

Lokale Dokumentation (Navigation durch Pakete innerhalb Ihres eigenen Codes):

  • In jeder Klasse verweisen Sie auf das eigene -Paket:
    <a href="package-summary.html">link text</a>

  • In der Klasse com.example.foo.MyClass , um auf das Paket com.example übergeordnetes * zu verweisen:
    <a href="../package-summary.html">link text</a>

  • In der Klasse com.example.foo.MyClass , um auf das Paket com.example.bar Geschwister * zu verweisen:
    <a href="../bar/package-summary.html">link text</a>

  • In der Klasse com.example.foo.MyClass , um auf das com.example.foo.fizz.buzz untergeordnete * Paket zu verweisen:
    <a href="fizz/buzz/package-summary.html">link text</a>

Diese Beispiele gehen alle davon aus, dass die Zielpakete tatsächlich Pakete sind; Mit anderen Worten, diese Klassen existieren auf dieser Ebene. Wenn stattdessen com.example ein gemeinsames Präfix für alle Pakete wäre, aber nicht eine einzelne deklarierte Klasse package com.example; , dann ist das zweite obige Beispiel ein toter Link , da bei com / example / package-summary.html .

Der größte Nachteil ist, dass Refactoring-Tools wahrscheinlich keine Links in Ihrem Javadoc reparieren, wenn Sie Ihre Pakete umstrukturieren oder umbenennen.

* Ja, ich verstehe, dass Pakete in Java logischerweise keine offiziellen "Eltern" - oder "Kind" -Beziehungen haben. Die Verzeichnisstruktur, die zum Organisieren von Dateien in Pakete verwendet wird, hat jedoch eine Eltern-Kind-Semantik, und darauf beziehe ich mich hier.

Remote-Dokumentation (verlinkt von einer URL oder einem Dateipfad):

Die verknüpfte Dokumentation funktioniert im Wesentlichen genauso wie die lokale Dokumentation, jedoch mit unterschiedlichen Anker-Tag-HREF-Zielen. Wenn Sie beispielsweise eine Verknüpfung mit öffentlicher Dokumentation im Web herstellen, wird eine absolute http:// -Adresse verwendet. Die Verknüpfung mit einer anderen Bibliothek an einem anderen Ort in Ihrem lokalen oder Unternehmens-Dateisystem könnte auch relative oder absolute Pfade verwenden.

Beachten Sie, dass bei der Verwendung der Link-Funktion des Javadoc-Tools grundsätzlich dasselbe geschieht. Er liest eine package-list -Datei aus der verknüpften Verzeichnisstruktur, um zu wissen, welche Pakete auf der Remoteseite existieren, und dann verwendet jede referenzierte Dokumentation aus diesen Paketen den entsprechenden URI in den generierten Links.

Nehmen Sie beispielsweise an, dass Sie eine Verknüpfung mit der Java-API herstellen:
http://docs.oracle.com/javase/7/docs/api/

Beziehen Sie sich dann auf die Paketbeschreibung java.util.concurrent , hängen Sie die Verzeichnisstruktur java/util/concurrent/ an den Basis-URI an und fügen Sie am Ende package-summary.html hinzu. (Oder kopieren Sie es einfach von Ihrem Webbrowser.) :-)

  

Ссылка

Auch hier gibt es einen Nachteil: Wenn Sie die externe API-Dokumentation verschieben ( ähem , Oracle), können Ihre {@link ...} -Tags funktionieren, wenn Sie Ihre Javadoc-Konfiguration auf einen neuen Link verweisen Jedes handschriftliche HTML-Markup für diese Paketdateien ist veraltet.

    
William Price 17.12.2014 09:33
quelle

Tags und Links