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’,’*’

相关文章

适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题...
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结...
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容...