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
?