osgi – 如何为运行时依赖项添加Import-Package指令?

我正在使用Gradle构建一个OSGi jar,我在使用清单时遇到了一些麻烦.这是我的构建脚本的摘录:
apply plugin: 'java'
apply plugin: 'osgi'

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

使用上面的代码,Gradle会检测我的依赖项并添加一个包含所有编译时依赖项的Import-Package.但是说我的应用程序也对org.springframework.orm有运行时依赖性,我如何告诉Gradle将它作为参数包含在Import-Package中?

如果上面的注释行未注释,则生成的Import-Package指令仅指定org.springframework.orm.自the Gradle documentation for OsgiManifest州以来,这让我感到困惑

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

Adds arguments to an instruction. If the instruction does not exists,
it is created. If it does exists,the arguments are appended to the
existing arguments.

但是,这似乎不适用于自动检测到的Import-Package参数.如果我指定’Import-Package’,’my.dependency.1’等指令,并在其间打印jar.manifest.instructions,我可以看到它们是如何按顺序添加的,它们都出现在生成的清单中,但是,如果手动指定了Import-Package,Gradle的OSGi插件似乎不会添加自动检测到的参数.

TL; DR:

>如果我不手动指定Import-Package指令,它将自动生成所有编译时依赖项,但不是运行时依赖项.
>如果我确实显示{指令’Import-Package’,’org.springframework.orm’},则不会自动包含编译时依赖项.

如何告诉Gradle我的运行时依赖项,以便将它们添加到Import-Package中?

我不熟悉Gradle bnd插件,但我熟悉bnd.

bnd指令中Import-Package的默认值为*.方法:匹配所有生成的导入.如果为Import-Package指定单个值,则它将覆盖*并成为唯一导入.因此,您的Import-Package指令几乎总是应该以最后一个位置的catch-all *结束.

猜测这将如何转换为Groovy / Gradle,我建议如下:

指令’Import-Package’,’org.springframework.orm’,’*’

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...