我正在尝试找到一种为当前操作系统动态加载平台相关库 jar 的方法。我需要访问使用 JNI 调用的第三方库,并为 Mac 和 Windows 提供不同的 jar。这两个库的所有调用和返回都是相同的,只需在编译后换出 lib 目录中的 jar 文件即可,但我希望我的应用程序能够确定应该在运行时加载哪个 jar。
我在这里找到了类似的帖子,但没有直接解决这个问题。 这篇文章展示了如何通过 ClassLoader 动态加载 jar,但据我所知,这意味着我必须使用Method method = clazz.getDeclaredMethod("methodName")
,method.invoke()
方法来调用该类提供的任何方法,并显式调用要加载到该类的每个类loader(我非常想避免)。
我希望找到一个看起来像这样的解决方案:
import external.lib.namespace.LibClassA;
import external.lib.namespace.LibClassB;
public class MyClass {
static {
if (System.getProperty("os.name").contains("Windows") {
ClassLoader.getSystemClassLoader().load("Lib_win.jar");
} else {
ClassLoader.getSystemClassLoader().load("Lib_mac.jar");
}
}
public static void Main(String[] args) {
LibClassA.platformDependantCall();
LibClassB.someOtherCall();
}
}