【问题标题】:Osgi eclipse: how to export package from a fragment bundle and make them visible to an external bundle?Osgi eclipse:如何从片段包中导出包并使它们对外部包可见?
【发布时间】:2014-05-15 16:19:55
【问题描述】:
启动情况(没有任何错误):
- 我有三个不同的包:包 A(称为 org.apache.xmlbeans)、包 B 和包 C
- bundle B 导入一些从 bundle A 导出的包
- bundle B 导出一些包(例如包 com.prova.xsd.config)
- bundle C 导入 bundle B 导出的包(例如包 com.prova.xsd.config)
现在我将包 B 作为包 A(片段主机)的片段添加指令
Fragment-Host:包 B 的 MANIFEST 中的 org.apache.xmlbeans
在此更改之后,所有捆绑包(A、B、C)的 MANIFEST.MF 中没有错误,但在捆绑包 C 的类 .java 中出现编译错误:
“无法解析导入的 com.prova.xsd.config”
与文件 .java 头部的导入相关联。
有什么问题?我该如何解决?
非常感谢,
安德烈亚
【问题讨论】:
标签:
java
eclipse
osgi-fragment
【解决方案1】:
您需要在主机插件 A 的 Manifest 中添加“Eclipse-ExtensibleAPI: true”。
来自Eclipse Help: OSGi Manifest Bundle:
Eclipse-ExtensibleAPI 头文件
Eclipse-ExtensibleAPI 用于指定主机包是否允许片段包
向主机添加额外的 API。如果主机包想要允许,则应使用此标头
片段以将其他包添加到主机的 API。如果此标头不是
指定,则使用默认值“假”。请注意,此标头仅由工具使用
(PDE) 为构建构建适当的类路径。 运行时不使用此标头
在运行时,总是允许片段添加额外的包、类和
资源到主机的 API。 Eclipse-ExtensibleAPI 标头必须使用以下内容
句法:
Eclipse-ExtensibleAPI ::= ( 'true' | 'false' )
以下是 Eclipse-ExtensibleAPI 标头的示例:
Eclipse-ExtensibleAPI: true