尝试从另一个包中检索服务时的Osgi java.lang.NoClassDefFoundError

时间:2014-03-03 14:55:39

标签: java osgi

所以,让我们看看,我有三个捆绑包: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"

提供者和客户端只是符号名称,“客户端”捆绑包导入并使用许多其他捆绑包中的许多其他类,没有任何错误。无论如何,我遇到了这个问题,我找不到任何理由。

任何帮助?

2 个答案:

答案 0 :(得分:1)

通常build.properties文件有问题,导致bundle错过实际的类文件。直接从Eclipse运行时无关紧要,但使用PDE导出包时这很重要。

要检查的事项:

  • 类文件真的在捆绑中吗?检查捆绑包时,您至少应该至少有一个提供者/文件夹和一个META-INF /文件夹
  • build.properties文件应该类似于:

    输出.. = bin / source .. = src / bin.includes = META-INF /,.

好运,弗兰克

答案 1 :(得分:0)

我终于能够解决这个问题了。

Manifest 文件或 build.properties 没有问题,这是构造函数问题。

MA_Provider 实现缺少void构造函数;一旦我添加了这个

public ProviderImpl(){}

在ProviderInterface的实现类上,OSGi包能够检索服务。