我正在使用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'
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,Gradle会检测我的依赖项并添加一个Import-Package包含所有编译时依赖项的函数.但是说我的应用程序也有运行时依赖性org.springframework.orm,我如何告诉Gradle将其作为参数包含在内Import-Package?
如果上面的注释行未注释,则生成的Import-Package指令仅 指定org.springframework.orm.这让我困惑,因为在摇篮文档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?
我不熟悉Gradle bnd插件,但我熟悉bnd.
Import-Packagebnd指令的默认值是*.方法:匹配所有生成的导入.如果为其指定单个值,Import-Package则它将覆盖*并成为唯一的导入.因此,你的Import-Package指令几乎总是*以最后一个位置的全能结束.
猜测这将如何转换为Groovy/Gradle,我建议如下:
instruction 'Import-Package', 'org.springframework.orm', '*'
| 归档时间: |
|
| 查看次数: |
3376 次 |
| 最近记录: |