Zugriffsregeln
Die Laufzeit von Eclipse 3.1 gibt dem Plug-in-Entwickler die Möglichkeit, die Sichtbarkeit des Plug-in-Codes gegenüber den nachgeordneten Plug-ins für jeweils ein Paket zu steuern.
Ein Paket kann wie folgt klassifiziert sein:
PDE übersetzt diese Laufzeit-Sichtbarkeitsregeln in Compiler-Zugriffsbeschränkungsregeln zum Zeitpunkt der Kompilierung. Demzufolge wird eine Verletzung der Sichtbarkeitsregel von einem Compiler als Warnung oder Fehler markiert - je nach dem Schweregrad der Verletzung.
Dank dieser Art von Unterstützung zum Zeitpunkt der Kompilierung, wird man niemals von Fehlern beim Laden der Klassen zur Laufzeit überrascht und ist sich der Verweise auf die internen Typen bewusst.
Zugängliche Pakete
Zugängliche Pakete sind für nachgeordnete Plug-ins bedingungslos sichtbar. Während API-Pakete klar in diese Kategorie fallen müssen, unterliegt es vollkommen dem Entwickler, zu entscheiden, welche anderen, von dem Plug-in exportierten Pakete diese Sichtbarkeitsstufe bekommen sollten.
Um ein Paket als zugänglich zu deklarieren, müssen Sie es in dem Abschnitt Exportierte Pakete in der Laufzeit des Editors für Plug-in-Manifeste auflisten und die Standard-Sichtbarkeitseinstellung unverändert lassen.
Verbotene Pakete
Sie können ein Paket aus dem nachgeordneten Plug-in jederzeit ausblenden, indem Sie es ausschließen von der Liste in dem Abschnitt Exportierte Pakete auf der Seite Laufzeit des Editors für Plug-in-Manifeste.
Verweise auf Typen aus einem verbotenen Paket führen zu Fehlern beim Laden von Klassen zur Laufzeit.
Um solche unangenehmen Situationen zu vermeiden, gehen Sie wie folgt vor:
Hinweise:
Es wird dringend empfohlen, den Schweregrad eines verbotenen Verweises als Fehler zu speichern.
Interne Pakete
Interne Pakete sind Pakete, die nicht für den Einsatz durch nachgeordnete Plug-ins bestimmt sind. Diese Pakete sind für nachgeordnete Plug-ins durch den Befehl Standardsichtbar.
Interne Pakete werden von nachgeordneten Plug-ins nur ausgeblendet, wenn Eclipse im Modus striktgestartet wird (z.B. wenn Sie mit dem VM-Argument -Dosgi.resolverMode=strict starten).
Interne Pakete müssen in dem Abschnitt Exportierte Pakete auf der Seite Laufzeit des Editors für Plug-in-Manifeste aufgelistet werden, wobei die ausgeblendeteOption ausgewählt ist.
Es werden zwei Maßnahmen getroffen, um von nachgeordneten Plug-ins aus verweisenden internen Paketen abzuraten:
Die Prioritätsstufe für abgeratene Verweise kann auf der Benutzervorgabenseite
Java > Compiler > Fehler/Warnungen > Veraltete und eingeschränkte API festgelegt werden.
Interne Pakete mit Freunden
Für ein Plug-in ist es wichtig, den vollständigen Zugriff auf seine internen Pakete für designierte "Freund"-Plug-ins erteilen zu können. Beispielsweise der PDE-Code ist auf mehrere Plug-ins aufgeteilt und das Plug-in org.eclipse.pde.ui sollte den vollständigen Zugriff auf die internen Pakete des Plug-ins org.eclipse.pde.core haben.
In dem nachstehenden Beispiel hat der Freund org.eclipse.pde.ui des Plug-ins vollen Zugriff auf das Paket org.eclipse.pde.internal.core.bundle des Plug-ins org.eclipse.pde.core.
Die Freunde können frei auf jeden beliebigen Typ des Paketes org.eclipse.pde.internal.core.bundle mit dem Vorteil des Compilers verweisen.
Wenn andererseits ein beliebiges anderes Plug-in auf einen Typen des Pakets org.eclipse.pde.internal.core.bundle verweist, markiert der Compiler den Verweis als einen abzuratenden Verweis, wie im vorherigen Abschnitt beschrieben.
Zugriffseinschränkungen aktivieren
Um die Unterstützung der PDE-Zugriffseinschränkung auszuschöpfen, ist die einzige Anforderung, dass das entsprechende Plug-in das 'OSGi-Produktpaket MANIFEST.MF enthält. Die PDE kümmert sich um den Rest einschließlich der Verwaltung des Plug-in-Klassenpfads.
Wenn das Plug-in nicht die Datei MANIFEST.MF enthält, kann diese Datei folgendermaßen erstellt werden:
Untersuchen der Zugriffsregeln
Sie können die Regeln der Zugriffseinschränkung untersuchen, die auf jeden Klassenpfadeintrag durch PDE auf der Eigenschaftsseite Java-Erstellungspfad Ihres Plug-in-Projektes erhoben werden.