所以,让我们看看,我有三个捆绑包:Provider interface ,Provider implementation 和Client。
Eclipse上的一切运行顺利,但是当我导出捆绑包并运行em时,当我尝试检索提供者服务时出现以下错误:
java.lang.NoClassDefFoundError: provider/providerinterface/ProviderService
接口正在导出他的包,因此应该没有错误。另外,Client还在其清单中导入providerInterface包。
Provider接口包的.jar内部有ProviderService类,因此也没有错误导出。
提供商界面的清单:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: IMA_Provider
Bundle-SymbolicName: IMA_Provider
Bundle-Version: 1.0.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Export-Package: provider.providerinterface
客户的清单:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MAClient
Bundle-SymbolicName: MA_Client
Bundle-Version: 1.0.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: provider.providerinterface,
org.osgi.framework;version="1.3.0",
org.osgi.util.tracker;version="1.4.2"
提供者和客户端只是符号名称,“客户端”捆绑包导入并使用许多其他捆绑包中的许多其他类,没有任何错误。无论如何,我遇到了这个问题,我找不到任何理由。
任何帮助?
答案 0 :(得分:1)
通常build.properties文件有问题,导致bundle错过实际的类文件。直接从Eclipse运行时无关紧要,但使用PDE导出包时这很重要。
要检查的事项:
build.properties文件应该类似于:
输出.. = bin / source .. = src / bin.includes = META-INF /,.
答案 1 :(得分:0)
我终于能够解决这个问题了。
Manifest 文件或 build.properties 没有问题,这是构造函数问题。
MA_Provider 实现缺少void构造函数;一旦我添加了这个
public ProviderImpl(){}
在ProviderInterface的实现类上,OSGi包能够检索服务。