2009-10-03 4 views
5

Uno de nuestros complementos requiere un JDK instalado, no solo un JRE. Necesitamos com.sun.javadoc y amigos de tools.jar. No creo que la licencia de Sun permita redistribuir tools.jar (que no es necesario si ya tiene un JDK de todos modos).Dependiendo de com.sun.javadoc desde tools.jar (Sun JDK) en Eclipse

También parece que no hay forma de que Eclipse especifique un JDK como dependencia. Todas las respuestas en los grupos de noticias de Eclipse sugieren que los usuarios finales tendrán que configurar primero su Eclipse correctamente.

¿Conoces alguna solución que haga obvia esta dependencia para los usuarios de nuestro complemento, , simplemente utilizando los mecanismos incorporados de Eclipse para las dependencias? Parece que este paquete no es válido para Import-Package en el manifiesto, a diferencia de, por ejemplo, com.sun.jdi.

(Como solución alternativa, en la actualidad sólo podemos advertir sobre la activación de complemento que esta biblioteca se encuentra.)

+0

Nota (http://www.nabble.com/Question-on-%22org.osgi.framework.system.packages%22-td22936822.html), en OSGi R4.2 (implementado en Equinox 3.5) tenemos se agregó una nueva propiedad ('org.osgi.framework.system.packages.extra') que se puede usar para agregar más paquetes a los que el marco determina que están disponibles desde la VM, pero actualmente no hay una propiedad de" exclusión ". Ver también http://www.mail-archive.com/[email protected]/msg02719.html – VonC

+0

Ver http://docs.codehaus.org/display/JETTY/OSGi+Tips (config.ini del Equinox framework) – VonC

+0

Acabo de agregar en mi respuesta el archivo de declaración (config.ini de su fragmento) para la declaración 'org.osgi.framework.system.packages', según lo solicitado. – VonC

Respuesta

2

Desde Eclipse ofrece un entorno OSGi, se puede consultar el artículo "Exposing the boot classpath in OSGi", e intente utilizar :

  • una declaración los paquetes de sistema
  • una ampliación de declaración de lotes (Fragmento)
  • delegación de arranque

Al especificar los paquetes JDK que necesita, el marco OSGI intentará cargarlos (y fallará si no están aquí).
Al especificar uno específico para JDK5 o JDK6, incluso podría garantizar la versión correcta del JDK.

La especificación OSGi permite el Marco (a través de su sistema de haz) para exportar los paquetes relevantes de su cargador de clases padre como paquetes de sistema utilizando la propiedad org.osgi.framework.system.packages.
Ya que reembalar el alojamiento JDK como un paquete no es una opción viable, se puede usar esta configuración para que el paquete del sistema (o el paquete con id 0) exporte estos paquetes.
La mayoría de las implementaciones de OSGi ya usan esta propiedad para exportar todos los paquetes públicos de JDK (según la versión de JDK detectada). A continuación se muestra un fragmento de un archivo de configuración Equinox para Java 1.6:

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

Utilizando esta propiedad, se puede añadir paquetes adicionales que serán cargadas y proporcionados por el marco y que se puede conectar a otros paquetes .

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

Nota: la solución más simple de especificar Bundle-RequiredExecutionEnvironment es sólo para el JRE, no el JDK ...


Ese tipo de configuración tienen que ser parte de la configuración .ini del framework Equinox (ver this example for Jetty y su config.ini).
En su caso, se declararía en config.ini de su fragmento.

+0

Gracias, parece que va definitivamente en la dirección correcta. Ahora necesito descubrir cómo proporcionar tal fragmento. ¿No sabrías dónde debería estar el 'org.osgi.framework.system.packages'? – ShiDoiSi

Cuestiones relacionadas