Recientemente escribí un pequeño lenguaje de scripting especializado y utilicé el Maven para exportar un paquete compatible con OSGi que también exporta un descriptor de servicio en el archivo de registro de servicio "META-INF/services/javax.script.ScriptEngineFactory
".¿OSGi es fundamentalmente incompatible con JSR-223 Scripting Language Discovery?
El problema es que aunque los paquetes de importación y exportación OSGi son correctos, el registro de servicio parece ser incompatible con OSGi (ya que OSGi mantiene sus paquetes fuera del classpath general y utiliza classloaders para módulos).
Mi pregunta es, ¿estoy en lo cierto al pensar que OSGi es incompatible con el mecanismo de Service Discovery? Si no, ¿qué puedo agregar a los metadatos de mi paquete para que ScriptEngineManager.getEngineFactories()
muestre el motor de script en un entorno OSGi?
Otra discrepancia entre JSR-223 y OSGi es que, en tiempo de ejecución, los scripts normalmente desean importar clases. Sin embargo, OSGi prefiere paquetes para especificar las importaciones en tiempo de compilación al declararlas en el paquete JAR META-INF/MANIFEST.MF. La directiva Dynamic-Imports-Package con un comodín puede solucionar este problema a costa de diluir la administración de la versión de JAR de OSGi. – buzz3791