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

2023-11-23

我正在使用 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指令指定only org.springframework.orm。这让我很困惑,因为OsgiManifest 的 Gradle 文档 states

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

向指令添加参数。如果该指令不存在, 它被创建了。如果存在,则参数将附加到 现有的论点。

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

TL;DR:

  • 如果我不手动指定Import-Package指令,它是使用我所有的编译时依赖项自动生成的,但不是运行时依赖项。
  • If I do manifest { instruction 'Import-Package', 'org.springframework.orm' },则不会自动包含编译时依赖项。

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


我对Gradle bnd插件不熟悉,但对bnd很熟悉。

默认值为Import-Package在 bnd 指令中是*。意思是:与所有生成的导入相匹配。如果您指定单个值Import-Package然后它会覆盖*并成为独家进口。因此你的Import-Package指令几乎总是应该以包罗万象的方式结束*在最后一个位置。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为运行时依赖添加Import-Package指令? 的相关文章

随机推荐