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

前端之家收集整理的这篇文章主要介绍了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’,’*’

猜你在找的设计模式相关文章