我正在使用 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
指定. 这让我很困惑,因为OsgiManifest 的 Gradle 文档指出
OsgiManifest instruction(String name, String... values)
向指令添加参数。如果该指令不存在,则创建它。如果确实存在,则将参数附加到现有参数。
但是,这似乎不适用于自动检测到的Import-Package
参数。如果我指定instruction 'Import-Package', 'my.dependency.1'
等等,并在中间打印,我可以看到它们是如何按顺序添加的,并且它们都出现在生成的清单中,但是如果手动指定jar.manifest.instructions
,Gradle 的 OSGi 插件似乎不会添加自动检测的参数Import-Package
.
TL;博士:
- 如果我不手动指定
Import-Package
指令,它会自动生成我所有的编译时依赖项,而不是运行时依赖项。 - 如果我这样做
manifest { instruction 'Import-Package', 'org.springframework.orm' }
,则不会自动包含编译时依赖项。
如何告诉 Gradle 我的运行时依赖项以便将它们添加到Import-Package
?