【发布时间】:2013-06-22 07:19:09
【问题描述】:
我正在使用 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)为指令添加参数。如果指令不存在, 它被创建。如果确实存在,则将参数附加到 现有的论点。
但是,这似乎不适用于自动检测到的 Import-Package 参数。如果我指定instruction 'Import-Package', 'my.dependency.1'等等,中间打印jar.manifest.instructions,我可以看到它们是如何按顺序添加的,并且它们都出现在生成的清单中,但是似乎Gradle的OSGi插件没有添加auto-如果手动指定 Import-Package,则检测到参数。
TL;DR:
- 如果我不手动指定
Import-Package指令,它会自动生成我的所有编译时依赖项,而不是运行时依赖项。 - 如果我使用
manifest { instruction 'Import-Package', 'org.springframework.orm' },则不会自动包含编译时依赖项。
如何告诉 Gradle 我的运行时依赖项,以便将它们添加到 Import-Package?
【问题讨论】: