Pregunta

¿Cómo puedo añadir paquetes a la importación de un paquete desde el código? Lo necesito ya que utilizar bibliotecas que dependen de la reflexión y requieren otros paquetes y yo no quiero que tenga que añadir manualmente los paquetes a MANIFIEST.MF para cada paquete que desarrollo

¿Fue útil?

Solución

No se puede. Import-paquetes son evaluados en la fase de resolución. (Fases están instalados -> Resuelta -> Activo).

Su código se ejecuta cuando el paquete está activo, por lo tanto, demasiado tarde para agregar Import-paquetes.

Puede hacer 2 cosas:

  • Import-Package los paquetes que va a utilizar
  • Utilice la propiedad dinámico-importPackage para especificar los paquetes cuya resolución puede ser aplazado hasta el tiempo de ejecución

Otros consejos

Además de la solución de Filippo, se puede tratar de invertir la dependencia. F.I. en lugar de llamar y la inspección de los otros paquetes, puede dejar que los paquetes que hacen. Otra forma sería usar un rastreador de haz y la obtención de la ClassLoader del haz de seguimiento. Con este cargador de clases puede actuar "como el paquete", por lo que no necesita la cláusula Import-Package más.

Cuando empecé a usar OSGi, este fue uno de los primeros requisitos que se me ocurrió. Con el tiempo, me di cuenta de que en casi todos los casos, no es una solución más limpia y más consistente. Por lo tanto, pensar en ello, si usted realmente necesita esta dependencia. ¿No hay manera de invertir o abstracta para crear una solución genérica?

Si nada ayuda (como último recurso), también se pueden crear (en memoria) con un fragmento de su paquete básico como anfitrión, proporcionando las importaciones requeridas. El BundleContext le ofrece un método para cargar un paquete de una corriente. A continuación, tiene que actualizar y llame refreshpackages (a través del servicio PackageAdmin) en su paquete de acogida con el fin de conseguir el cargador de clases actualizado (implica un reinicio de su paquete). Sin embargo, al final, tendrá acceso a todos sus paquetes.

Como nota al margen, yo no recomendaría para manipular su paquete de host mediante la deformación de la declaración de importación y luego actualizar ... Esto hace que su indeterminista paquete y no funcionará con los paquetes firmados. Además, esto es contra todo lo que uno espera de OSGi (Imagine una serie cada vez mayor con el tiempo ... que necesita para reducir las importaciones en algún momento, así !!!)

Cheers, Mirko

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top