gpt4 book ai didi

java - OSGi 和 native 事件

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:32 24 4
gpt4 key购买 nike

我正在使用一个库,它通过某种 native 连接与另一个应用程序进行通信。

我没有这个库的任何源代码,所以我无法真正指定应用程序实际如何通信。

无论如何,它运行得很好,我可以与应用程序进行通信。通过这个库,我可以监听其他应用程序中发生的事件。我可以注册事件,并使用特殊的事件类调用监听器。

使用 OSGi,此事件类无法加载,并出现 java.lang.NoClassDefFoundError 异常。每个事件都在其自己的新线程中触发。该包已正确导入,我可以在整个代码中使用该类。

我使用的库是 IBM 的 HACL 库。

这是 API 的问题吗?或者是因为本地事件的处理方式?我可以以某种方式让这些新线程知道 OSGi 类加载器吗?

谢谢。

完整的堆栈跟踪是:

Exception in thread "Thread-20" java.lang.NoClassDefFoundError: com/ibm/eNetwork/ECL/event/ECLPSEvent
Caused by: java.lang.ClassNotFoundException: com.ibm.eNetwork.ECL.event.ECLPSEvent
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

最佳答案

首先:我不知道您正在使用的IBM产品,只是根据我在OSGi中使用的其他外部库提出建议。

建议的方法是将外部库工作所需的所有 jar 包含到您自己的包中(常见的解决方案是将它们放在单独的文件夹中)并扩展您的包类路径以适应这种情况。请注意,您需要在此处指定所有 jar。示例:

您的产品由“a.jar”和“b.jar”组成,并且您将它们复制到 bundle 中的 lib/目录中,那么 bundle 类路径必须是:

Bundle-ClassPath: .,lib/a.jar,lib/b.jar

假设您自己的代码位于 bundle jar 的根目录。

常见错误:

  1. 忘记将依赖项 jar 也包含在 bundle 类路径中。
  2. 忘记在构建/导出期间将 jar 包含在 bundle 中。
  3. 忘记导入产品 jar 所需的包。

所有这些都会导致某种 ClassNotFoundException。我的印象是,在你的情况下,问题可能是由于 1.

关于java - OSGi 和 native 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com