PDE verwendet dynamische Klassenpfade zum Berechnen des Erstellungspfades für Plug-in-Projekte in Eclipse 3.0.
Frage: Was bedeutet Klassenpfad-Stabilität?
Antwort: Klassenpfad-Stabilität ist ein Maß für die Änderungen des Klassenpfads
in Bezug auf die vom Entwickler getroffenen Self-Hosting-Auswahl. Idealerweise sollten sich
Klassenpfade ungeachtet der Zahl der Quellprojekte im Arbeitsbereich nie ändern. Binärprojekte mit
Self-Hosting bieten eine sehr gute Klassenpfad-Stabilität, da alle Klassenpfade nur Projektreferenzen
enthalten. Beim Self-Hosting von externen Plug-ins sind die Klassenpfade etwas weniger stabil. Bezüglich der lokalen Speicherposition der externen Bibliotheken sind sie zwar noch stabil,
aber sie können nur dann von allen Teammitgliedern gemeinsam über ein Repository genutzt werden,
wenn die Liste der Quellenprojekt-Plug-ins unverändert bleibt.
In Version 2.0 wurde die Plug-in-Version zur Speicherposition des Plug-ins im Dateisystem hinzugefügt. Das hat die Klassenpfad-Stabilität bei der Verwendung externer Plug-ins weiter reduziert.
Frage: Sollte man nicht besser ausschließlich Binärprojekte verwenden, da sie eine bessere Klassenpfad-Stabilität
bieten?
Antwort: Self-Hosting mit importierten Binärprojekten ist eine gute Wahl, solange die Zahl der importierten
Plug-ins in einem vernünftigen Rahmen bleibt (einige Dutzend). Bei großen Produkten mit Hunderten
von Plug-ins ist der Import sämtlicher Plug-ins keine Option mehr.
Üblicherweise setzen die Entwickler solcher Produkte Self-Hosting für einige wenige Quellenprojekte und
einige Dutzend zugehöriger Binärprojekte ein. Der Rest besteht aus externen Plug-ins. Rein theoretisch
betrachtet erscheint es als Zeit- und Ressourcenverschwendung, eine große Zahl von externen Plug-ins zu
importieren, nur um einige wenige Quellenprojekte kompilieren zu können.
Frage: Ich glaube, dass die Self-Hosting-Methode (Binärprojekte/externe Plug-ins) besser ist. Was ist falsch
daran, wenn mein Team diese Methode einsetzt, sofern alle Teammitglieder das machen?
Antwort: Die Verwendung statischer Klassenpfade (durch Verwendung von Binärprojekten oder externer Plug-ins) lässt
keine Änderung Ihrer einmal gewählten Self-Hosting-Methode mehr zu und zwingt alle anderen, sie ebenfalls zu verwenden.
Frage: Was sind dynamische Klassenpfade?
Antwort: Dynamische Klassenpfade sind eine Funktion von PDE, die den für Plug-in-Abhängigkeiten
relevante Teil des Klassenpfads eines
Plug-in-Projekts dynamisch berechnet. Dabei kommt die JDT-Klassenpfadcontainer-Technologie zum Einsatz. Die Auflösung der dynamischen Klassenpfade erfolgt "just in time" und entspricht immer den aktuellen
Bedingungen in Ihrem Arbeitsbereichs.
Darüber hinaus lässt sich PDE durch die dynamische Auflösung des Klassenpfads an Änderungen anpassen. Dadurch
ist der Klassenpfad unabhängig von Ihrer Self-Hosting-Methode immer richtig.
Frage: Wie ist die Klassenpfad-Stabilität von dynamischen Klassenpfaden?
Antwort: Maximal. Sämtliche Einträge für erforderliche Plug-ins werden durch einen einzigen Klassenpfadcontainer-Eintrag
ersetzt. Dadurch ist Ihr Klassenpfad immer derselbe.
Frage: Welche Vorteile habe ich von dynamischen Klassenpfaden?
Antwort: Mit dynamischen Klassenpfaden muss man sich nicht im Voraus auf eine Self-Hosting-Methode festlegen. Falls Binärprojekte vorhanden sind, werden die dynamischen Klassenpfade in Projektreferenzen aufgelöst. Falls nicht,
werden sie in externe Plug-in-JARs aufgelöst. Wenn Binärprojekte hinzugefügt oder entfernt werden,
verfolgen die dynamischen Klassenpfade die Änderungen und passen sich entsprechend an. Sie müssen Ihren
Klassenpfad nie wieder aktualisieren. Wenn andere Teams eines oder mehrere Ihrer Projekte aus CVS abrufen und kompilieren
wollen, müssen sie dazu nicht dieselbe Self-Hosting-Methode wie Sie verwenden.
Frage: PDE-Kern löst die dynamischen Klassenpfade auf. Heißt das, ich muss mich darauf verlassen, dass
PDE das Richtige tut?
Antwort: Kurz gesagt: ja. Ihr Klassenpfad ist dynamisch, er wird während des Betriebs berechnet und
ist nicht fest codiert in der Datei ".classpath". ( Das ist ja auch der Sinn und Zweck des dynamischen Klassenpfads.). Aber denken Sie einfach daran: PDE hat einen
ausgereiften Algorithmus zur Berechnung des Klassenpfads, der versucht, möglichst nah an die Laufzeitbedingungen
zu kommen. Der JDT-Compiler sollte während der Entwicklung möglichst dasselbe "sehen", wie das Ladeprogramm für Klassen
zur Laufzeit. In den meisten Fällen ist PDE-Kern besser dazu in der Lage, Ihren Klassenpfad aktuell zu halten,
als Sie selbst. Wenn Sie Ihren Klassenpfad für die Kompilierung manuell anpassen müssen, stimmt wahrscheinlich etwas mit
Ihrer Konfiguration nicht. Höchstwahrscheinlich wird Ihr Plug-in dann auch nicht korrekt ausgeführt. (Das gilt nicht
für SWT-Teams.)
Frage: Mein Team setzt Binärprojekte ausschließlich für Self-Hosting ein. Habe ich irgendwelche Nachteile, wenn ich zu dynamischen Klassenpfaden wechsle?
Antwort: Nein. Dynamische Klassenpfade zwingen Sie nicht, eine bestimmte Art von Self-Hosting einzusetzen. Es werden
lediglich die Abhängigkeiten von Plug-ins in einem bestimmten Kontext aufgelöst.
Wenn Sie weiterhin externe Plug-ins als Binärprojekte importieren, werden die dynamischen Klassenpfade die Projektreferenzen wie bisher auflösen.
Frage: Wie werden dynamische Klassenpfade aktiviert?
Antwort: Aktualisieren Sie die Klassenpfade für alle Ihre 2.1-Plug-ins nur einmal. Sie werden feststellen, dass die Klassenpfade jetzt kürzer sind. Alle Referenzen von abhängigen
Plug-ins wurden durch einen einzigen Containereintrag ersetzt. Sie können jetzt mit Ihrer Arbeit weitermachen. Achten Sie darauf, die Quellenprojekte einschließlich der geänderten ".classpath"-Dateien in das Repository einzuchecken.
Frage: Ich habe spezielle Klassenpfadeinträge, damit ich meine Ant-Tasks, -Servlets oder -JSPs kompilieren kann.
Antwort: Bei der Berechnung des Klassenpfads berücksichtigt PDE auch "jars.extra.classpath"
in der Datei "build.properties". Wenn Ihre Build-Einstellungen korrekt sind, erzeugt PDE den korrekten Klassenpfad.
Frage: Wie kann ich die dynamisch berechneten Klassenpfadeinträge ändern?
Antwort: Im unwahrscheinlichen Fall, dass Sie Ihre dynamischen Klassenpfadeinträge ändern müssen, können Sie das
in der Registerkarte "Eigenschaften > Java-Erstellungspfad > Bibliotheken" tun. Erweitern Sie den
Knoten 'Plug-in-Abhängigkeiten' und bearbeiten Sie die Einträge darin.
Frage: Einige der berechneten Einträge für Bibliotheken haben keine Quellenzuordnung. Kann ich diese manuell hinzufügen?
Antwort: PDE berechnet in den meisten Fällen die Quellenzuordnung für die Bibliotheken. In einigen wenigen
Fällen kann die automatische Quellenzuordnung fehlschlagen, wenn Quellen-ZIPs nicht der Namenskonvention folgen. Sie können für diese Einträge manuell Quellenzuordnungen im Eigenschaftsdialog für den Erstellungspfad hinzufügen.
Frage: Werde meine manuellen Quellenzuweisungen gelöscht, wenn PDE den Klassenpfad das nächste Mal
dynamisch berechnet?
Antwort: Nein. PDE protokolliert diese manuellen Änderungen und wendet sie nach der dynamischen Berechnung erneut
an, sofern die Bibliothekspfade sich nicht geändert haben.
Frage: Ich bin SWT-Entwickler. Kann ich dynamische Klassenpfade verwenden?
Antwort: Leider nein. SWT-Team hat eine eindeutige Self-Hosting-Konfiguration, wodurch Klassenpfade für verschiedene Umgebungen im Repository gespeichert und in '.classpath' in dem Projekt umbenannt werden, abhängig von der Plattform, auf der sie arbeiten. Sie werden weiterhin ihre Self-Hosting-Methode einsetzen müssen.