gpt4 book ai didi

java-native-interface - 从 JNI 加载 OSGi 类

转载 作者:行者123 更新时间:2023-12-02 01:11:24 28 4
gpt4 key购买 nike

我正在调用一些试图加载 Java 类的 C++ 代码,例如

JNIEnv *jenv = ...
jclass cls = jenv->FindClass("org/some/bundle/SomeClass");

现在,问题是这个类驻留在一个 OSGi 包中,上面的代码找不到我的类。

此问题仅在运行单元测试(Tycho-surefire headless tests)时出现。有没有一种简单的方法可以强制 OSGi 框架从 JNI 中找到我的类?在 Java 方面,我怀疑像 Dynamic-ImportPackage 这样的东西可以解决我的问题。我不愿意更改第三方 C++ 库只是为了让它与测试框架一起工作,所以如果可能的话,我更喜欢 Java 测试设置/配置端的解决方案。

最佳答案

JNIEnv 的 FindClass 方法只搜索全局应用程序类路径定义的系统类加载器的内容。由于 OSGi 不使用全局类路径,因此这不起作用也就不足为奇了。

一般来说,每当加载一个类时,您不仅需要指定类名,还需要指定加载它的类加载器。这是模块化的必然要求。因此您的代码需要能够找到您希望包含该类的包,然后调用它的 loadClass 方法。您可以直接在 C++ 代码中执行此操作,但编写 Java 实用程序方法来执行此操作然后从 C++ 中调用该方法可能更容易。

关于java-native-interface - 从 JNI 加载 OSGi 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16979664/

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