我正在使用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插件没有如果手动指定Import-Package
,则添加自动检测到的参数。
Import-Package
指令,它将自动生成所有编译时依赖项,但不是运行时依赖项。manifest { instruction 'Import-Package', 'org.springframework.orm' }
,则不会自动包含编译时依赖项。如何告诉Gradle我的运行时依赖项,以便将它们添加到Import-Package
?
答案 0 :(得分:6)
我不熟悉Gradle bnd插件,但我熟悉bnd。
bnd指令中Import-Package
的默认值为*
。方法:匹配所有生成的导入。如果您为Import-Package
指定单个值,则它会覆盖*
并成为唯一导入。因此,您的Import-Package
指令几乎总是以最后一个位置的全部*
结束。
猜测这将如何转化为Groovy / Gradle,我建议如下:
instruction 'Import-Package', 'org.springframework.orm', '*'