Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Osgi java.lang.NoClassDefFoundError在尝试从另一个捆绑包检索服务时出错_Java_Osgi - Fatal编程技术网

Osgi java.lang.NoClassDefFoundError在尝试从另一个捆绑包检索服务时出错

Osgi java.lang.NoClassDefFoundError在尝试从另一个捆绑包检索服务时出错,java,osgi,Java,Osgi,让我们看看,我有三个包:提供者接口、提供者实现和客户端 Eclipse上的一切都运行顺利,但当我导出捆绑包并运行em时,在尝试检索提供程序服务时出现以下错误: java.lang.NoClassDefFoundError: provider/providerinterface/ProviderService 接口正在导出他的包,因此应该没有错误。此外,客户端还在其清单中导入providerInterface包 提供者接口包的.jar中确实包含ProviderService类,因此导出时也不会出

让我们看看,我有三个包:提供者接口、提供者实现和客户端

Eclipse上的一切都运行顺利,但当我导出捆绑包并运行em时,在尝试检索提供程序服务时出现以下错误:

java.lang.NoClassDefFoundError: provider/providerinterface/ProviderService
接口正在导出他的包,因此应该没有错误。此外,客户端还在其清单中导入providerInterface包

提供者接口包的.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"
提供者和客户端只是符号名称,“客户端”捆绑包从许多其他捆绑包导入并使用许多其他类,没有任何错误。不管怎么说,我被这件事缠住了,我找不到任何理由


有什么帮助吗?

通常build.properties文件有问题,导致包丢失实际的类文件。这在直接从Eclipse运行时并不重要,但在使用PDE导出捆绑包时却很重要

检查事项:

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

    输出..=垃圾箱/ 来源..=src/ bin.includes=META-INF/


祝你好运,弗兰克。我终于解决了这个问题

清单文件或build.properties没有问题,这是一个构造函数问题

MA_提供者实现缺少无效构造函数;一旦我加上这个

public ProviderImpl(){}

在ProviderInterface的实现类中,OSGi捆绑包能够检索该服务。

嘿,弗兰克,真诚地感谢您的帮助。大多数情况下,eclipse之外的运行时问题都是由这些与清单和构建文件相关的错误引起的,但事实并非如此,这就是我被卡住的原因。无论如何,我很感激;)