Java OSGI-跨捆绑包的静态方法调用

Java OSGI-跨捆绑包的静态方法调用,java,static,osgi,Java,Static,Osgi,我有一个第三方JAR,我已经使用bnd将其转换为OSGI包。我需要从自己的包中调用以使用它的代码如下所示: ThirdParty.setRegKey(myRegKey); ThirdParty thirdParty = new ThirdParty(); thirdParty.callMethod(); 引起我问题的似乎是第一行——静态方法调用。在OSGI容器之外,使用标准JAR,这可以很好地工作。然而,在OSGI内部,我在第3行得到一个错误,指出没有设置注册密钥 像这样跨捆绑包的静态方法调用

我有一个第三方JAR,我已经使用bnd将其转换为OSGI包。我需要从自己的包中调用以使用它的代码如下所示:

ThirdParty.setRegKey(myRegKey);
ThirdParty thirdParty = new ThirdParty();
thirdParty.callMethod();
引起我问题的似乎是第一行——静态方法调用。在OSGI容器之外,使用标准JAR,这可以很好地工作。然而,在OSGI内部,我在第3行得到一个错误,指出没有设置注册密钥


像这样跨捆绑包的静态方法调用是否存在任何问题?就好像静态上下文没有在捆绑包之间共享一样。

您可能需要导出/导入包含第三方类的包。否则,它会在不同包的不同类装入器中结束,因此它确实不是共享的


真正的OSGi方法是通过一些服务来完成这项工作。

您调试过代码吗?由于您没有告诉我们您使用的是哪一个第三方库,而且我们也不知道您的完整环境,因此可能是
setRegKey()
callMethod()
试图做一些在OSGi内部不起作用的“智能”操作


JDBC驱动程序管理器有这样一个问题:包导入JDBC驱动程序类,但驱动程序管理器决定包中的调用线程不应该“看到”JDBC驱动程序类,因此在OSGi中运行时失败。

感谢您的澄清。在第三方包清单中,我有导出包:com.thirdparty.Package,然后在我的包清单中有导入包:com.thirdparty.Package。这就是您的意思吗?示例代码表明清单导入和导出是正确的,否则他将无法编译,并且说明的问题是第3行的运行时失败。@William Yes。不过,如果您的代码都在一个包中,那么这应该不是问题所在。