2009-10-03 5 views
5

Eines unserer Plugins erfordert ein installiertes JDK, nicht nur ein JRE. Wir brauchen com.sun.javadoc und Freunde von tools.jar. Ich glaube nicht, dass die Lizenz von Sun es erlaubt, tools.jar neu zu verteilen (was nicht notwendig ist, wenn Sie sowieso schon ein JDK haben).Abhängig von com.sun.javadoc von tools.jar (Sun JDK) in Eclipse

Es scheint auch, dass es in Eclipse keine Möglichkeit gibt, ein JDK als Abhängigkeit anzugeben. Alle Antworten in den Eclipse-Newsgroups legen nahe, dass Endbenutzer ihre Eclipse zuerst richtig konfigurieren müssen.

Kennen Sie eine Problemumgehung, die diese Abhängigkeit für Benutzer unseres Plugins, , nur durch die Verwendung von Eclipse On-Board-Mechanismen für Abhängigkeiten? Es scheint, dass dieses Paket nicht einmal für Import-Package im Manifest gültig ist, anders als z. com.sun.jdi.

(Als Behelfslösung, zur Zeit können wir nur auf Plugin-Aktivierung warnen, dass diese Bibliothek fehlt.)

+0

Hinweis (http://www.nabble.com/Question-on-%22org.osgi.framework.system.packages%22-td22936822.html), in OSGi R4.2 (implementiert in Equinox 3.5) haben wir hinzugefügt hinzugefügt eine neue Eigenschaft ('org.osgi.framework.system.packages.extra'), die verwendet werden kann, um weitere Pakete zu denen, die das Framework bestimmt, verfügbar sind von der VM, aber es gibt derzeit keine" Exclude "-Eigenschaft. Siehe auch http://www.mail-archive.com/[email protected]/msg02719.html – VonC

+0

Siehe http://docs.codehaus.org/display/JETTY/OSGi+Tips (config.ini des Equinox-Framework) – VonC

+0

Gerade hinzugefügt in meiner Antwort die Deklarationsdatei (config.ini Ihres Fragments) für 'org.osgi.framework.system.packages' Deklaration, wie angefordert. – VonC

Antwort

2

Da Eclipse eine OSGi-Umgebung bietet, die Sie dem Artikel „Exposing the boot classpath in OSGi“ beziehen könnte, und versuchen Sie es mit :

  • eine Systempakete Erklärung
  • eine Erweiterung Bundles (Fragment) Erklärung
  • oder Boot-Delegation

Durch Angabe der JDK-Pakete, die Sie benötigen, versucht das OSGI-Framework, sie zu laden (und fehlschlägt, wenn nicht vorhanden).
Indem Sie einen spezifischen für JDK5 oder JDK6 angeben, können Sie sogar die richtige Version des JDK sicherstellen.

Die OSGi-Spezifikation ermöglicht das Framework (durch seine Systembündel) als Systempakete alle relevanten Pakete von der übergeordneten Klassenlader zu exportieren org.osgi.framework.system.packages Eigenschaft.
Da das Reparieren des Hostings JDK als Paket keine praktikable Option ist, kann man diese Einstellung verwenden, um das Paket (oder das Paket mit ID 0) diese Pakete selbst exportieren zu lassen.
Die meisten OSGi-Implementierungen verwenden diese Eigenschaft bereits, um alle öffentlichen JDK-Pakete zu exportieren (basierend auf der erkannten JDK-Version). Unten ist ein Ausschnitt aus einer Datei Equinox Konfiguration für Java 1.6:

org.osgi.framework.system.packages = \ 
    javax.accessibility,\ 
    javax.activity,\ 
    javax.crypto,\ 
    javax.crypto.interfaces,\ 
    … 
    org.xml.sax.helpers 

Verwendung dieser Eigenschaft kann man zusätzliche Pakete hinzufügen, die geladen werden und durch den Rahmen zur Verfügung gestellt, und das kann zu anderen Bundles zu verdrahten .

org.osgi.framework.system.packages = \ 
    javax.accessibility,\ 
    javax.activity,\ 
    … 
    org.xml.sax.helpers, \ 
    special.parent.package 

Hinweis: Die einfachere Lösung Bundle-RequiredExecutionEnvironment der Angabe ist nur für die JRE, nicht das JDK ...


Diese Art der Konfiguration Teil der Config sein müssen .ini des Equinox-Frameworks (siehe this example for Jetty und config.ini).
In Ihrem Fall würde es in der config.ini Ihres Fragments deklariert werden.

+0

Danke, das scheint definitiv in die richtige Richtung zu gehen. Ich muss jetzt herausfinden, wie man ein solches Fragment bereitstellt. Sie würden nicht wissen, wohin die 'org.osgi.framework.system.packages' gehen müssten? – ShiDoiSi

Verwandte Themen