osgi gradle bnd

osgi - ¿Cómo agregar instrucciones Import-Package para las dependencias de tiempo de ejecución?



gradle bnd (1)

No estoy familiarizado con el complemento de Gradle bnd, pero estoy familiarizado con Bnd.

El valor predeterminado de Import-Package en la instrucción bnd es * . Los medios: coinciden con todas las importaciones generadas. Si especifica un solo valor para Import-Package , anula * y se convierte en la única importación. Por lo tanto, su instrucción Import-Package casi siempre debe terminar con un catch-all * en la última posición.

Adivinando cómo esto se traduciría en Groovy / Gradle, sugiero lo siguiente:

instruction ''Import-Package'', ''org.springframework.orm'', ''*''

Estoy construyendo un jar OSGi usando Gradle, y estoy teniendo un problema con el manifiesto. Aquí hay un extracto de mi script de compilación:

apply plugin: ''java'' apply plugin: ''osgi'' jar { baseName = ''awesome'' manifest { name = ''An Awesome Application'' symbolicName = ''com.example.awesome'' // instruction ''Import-Package'', ''org.springframework.orm'' } }

Usando lo anterior, Gradle detecta mis dependencias y agrega un Import-Package con todas mis dependencias en tiempo de compilación. Pero supongamos que mi aplicación también tiene una dependencia de tiempo de ejecución en org.springframework.orm , ¿cómo le digo a Gradle que incluya eso como argumento en Import-Package ?

Con la fila comentada anterior sin comentar, la instrucción Import-Package generada especifica únicamente org.springframework.orm . Esto me confunde, ya que la documentación de Gradle para los estados de OsgiManifest

OsgiManifest instruction(String name, String... values)

Agrega argumentos a una instrucción. Si la instrucción no existe, se crea. Si existe, los argumentos se anexan a los argumentos existentes.

Sin embargo, esto no parece aplicarse a los argumentos de Import-Package autodetectados. Si especifico las instruction ''Import-Package'', ''my.dependency.1'' etc., e jar.manifest.instructions entre ellas, puedo ver cómo se agregan en secuencia, y todas aparecen en el manifiesto generado, pero parece que el complemento OSGi de Gradle no agrega los argumentos autodetectados si Import-Package se especifica manualmente.

TL; DR:

  • Si no especifico manualmente la instrucción Import-Package , se genera automáticamente con todas mis dependencias de tiempo de compilación, pero no dependencias de tiempo de ejecución.
  • Si manifest { instruction ''Import-Package'', ''org.springframework.orm'' } , las dependencias en tiempo de compilación no se incluyen automáticamente.

¿Cómo puedo decirle a Gradle mis dependencias de tiempo de ejecución para que puedan agregarse a Import-Package ?