Eclipse 2.1 enthält viele Leistungserweiterungen, darunter einige im Bereich des Ladens von Klassen. Zu diesem Zweck wurden zur Plug-in-Manifestdatei Konfigurationsbefehle hinzugefügt. Die vorliegende Datei erläutert ihre Verwendung.
-noPackagePrefixes
an die ausführbare Datei von Eclipse
übergeben.
Die Deklaration der Paketpräfixe in der Plug-in-Manifestdatei wird durch ein Element
packages
für jede Bibliothek angegeben, die in der Datei deklariert ist.
Für das Element packages
gibt es ein Attribut prefixes
, das die Paketpräfixe für diese Bibliothek auflistet.
Es ist gängige Praxis, dass JAR-Dateien Code enthalten, der sich in mehreren Paketen befindet.
Beispielsweise enthält das Plug-in org.eclipse.core.runtime
Code, der aus den folgenden Paketen stammt:
org.eclipse.core.runtime
.
org.eclipse.core.internal.runtime,
org.eclipse.core.internal.plugins
org.eclipse.core.runtime.model
In diesem Fall gibt die Datei plugin.xml
Folgendes an:
<runtime>
<library name="runtime.jar">
<export name="*"/>
<packages
prefixes="org.eclipse.core"/>
</library>
</runtime>
Bitte beachten Sie, dass org.eclipse.core
ein allgemeines Präfix für alle Pakete im Plug-in ist.
Alternativ können Sie auch alle 4 Präfixe in einer Datei als Liste mit Kommatrennzeichen deklarieren.
In diesem Fall muss zwischen dem Aufwand, der durch die erforderliche Anzahl von Prüfungen bei mehreren Einträgen verursacht wird, und dem Risiko eines Präfixes, das möglicherweise falsche Angaben enthält, abgewogen werden.
Abhängig davon, wie Ihr Code strukturiert ist, kann es unter Umständen besser sein, bis zu 5-10 Präfixe aufzulisten,
statt ein allgemeineres Präfix zu verwenden.
Falls Ihr gesamter Code über mehrere Plug-ins hinweg beispielsweise dasselbe Präfix
(z. B. com.mycompany
) enthält, können Sie nicht alle Vorteile nutzen,
wenn Sie in der Datei nur das einzige Präfix
"com.mycompany" auflisten.
Wenn ein Plug-in mehrere Bibliotheksdeklarationen enthält, sollte jede die Paketpräfixe aus ihrer JAR berücksichtigen.
Falls Sie in Ihr Plug-in-Manifest kein Element packages
aufnehmen, ist Ihr Code zwar weiterhin funktionsfähig, nutzt jedoch nicht die Optimierung für das Laden von Klassen.
Bitte beachten Sie, dass die Liste der Paketpräfixe für alle Pakete in allen Bibliotheken des Plug-ins vollständig sein muss.
Wenn diese Liste unvollständig ist, funktioniert der Code nicht.
In Eclipse 2.0.2 und früheren Erstellungen der Integration von Eclipse 2.1 wurde eine Komponente hinzugefügt, mit deren Hilfe der Benutzer eine Eigenschaftsdatei für das Klassenladeprogramm angeben konnte, die die Paketpräfixe für die Erweiterungen der Klassenladeprogramme enthielt. Die Verwendung dieser Datei ist in dem Abschnitt angegeben, der aufgerufen wird, wenn Sie hier klicken.
Eclipse 2.1 ist mit der Eigenschaftsdatei für Klassenladeprogramme vollständig abwärtskompatibel und kann in der Tat zusammen mit den Paketpräfixdeklarationen im Plug-in-Manifest verwendet werden. Dieser Abschnitt beschreibt das Interaktionsverhalten dieser beiden Mechanismen.
Standardverhalten (ohne Befehlszeilenargumente): Die Paketpräfixe werden aus der Datei
plugin.xml
gelesen und auf die Strategie für das Laden von Klassen angewendet.
Auf die Datei classloader.properties
wird nicht zugegriffen, und sie wird nicht berücksichtigt.
Verwendung des Arguments "-classloaderProperties": Die Paketpräfixe werden aus der Datei
plugin.xml
gelesen, und anschließend wird die Datei classloader.properties
gelesen. Wenn die Eigenschaftsdatei des Klassenladeprogramms einen Eintrag für ein Plug-in enthält, das Präfixe in der Manifestdatei definiert hat, überschreibt der Eintrag in der Eigenschaftsdatei diese Einträge und hat Vorrang.
(Die Ergebnisse werden NICHT gemischt.) Falls der Eintrag in der Eigenschaftsdatei
keinen Wert enthält (z. B. org.eclipse.core.runtime=
), werden alle in der Manifestdatei deklarierten Präfixe entfernt, und die Strategie für das Laden von Klassen verwendet die Erweiterungen standardmäßig nicht.
Verwendung des Arguments "-noPackagePrefixes": Alle in der Plug-in-Manifestdatei deklarierten Paketpräfixe werden ignoriert, und auch die Eigenschaftsdatei des Klassenladeprogramms wird nicht berücksichtigt. Die Strategie für das Laden von Klassen verwendet die Präfixerweiterungen standardmäßig nicht.
Verwendung beider Argumente ("-classloaderProperties" und "-noPackagePrefixes"): Alle Paketdeklarationen in der Plug-in-Manifestdatei werden ignoriert. Die Eigenschaftsdatei des Klassenladeprogramms wird gelesen, und alle in dieser Datei definierten Deklarationen werden beim Laden von Klassen berücksichtigt.
Falls Sie eine Ausnahmebedingung java.lang.ClassNotFoundException
empfangen, ist dies ein Hinweis darauf, dass möglicherweise ein Problem im Zusammenhang mit den Einträgen in der Manifest- oder der Eigenschaftsdatei vorliegt.
Versuchen Sie, Eclipse mit dem Befehlszeilenargument -noPackagePrefixes
auszuführen, und verwenden Sie das Argument -classloaderProperties
NICHT. Dies inaktiviert alle Erweiterungen für das Laden von Klassen in Bezug auf Paketpräfixe.
Falls Ihre Code hiernach problemlos ausgeführt wird, enthalten diese Dateien möglicherweise eine korrekte Syntax, aber
eventuell fehlen in den Paketpräfixen in der durch Kommata gegliederten Liste einige Einträge.
Um dieses Problem zu überprüfen, setzen Sie die entsprechenden Zeilen in der Datei auf Kommentar.
Verwenden Sie ein Nummernzeichen (#), um die Zeile des entsprechenden Plug-ins in der Eigenschaftsdatei auf Kommentar zu setzen, oder verwenden Sie HTML-Kommentarzeichen (<!-- ... -->), um die Paketdeklaration in der
entsprechenden Datei plugin.xml
auf Kommentar zu setzen.
NoClassDefFoundError
verursacht. Dieses Problem kann entweder durch die Inaktivierung der Erweiterungen für das Klassenladeprogramms unter Verwendung des Befehlszeilenarguments -noPackagePrefixes
oder durch Hinzufügen der entsprechenden Paketpräfixeinträge zum Plug-in und allen seinen Fragmenten gelöst werden.