gpt4 book ai didi

java - 根据操作系统动态加载 jar

转载 作者:行者123 更新时间:2023-12-01 05:26:35 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来为当前操作系统动态加载平台相关的库 jar。我需要访问使用 JNI 调用的第三方库,并且具有适用于 Mac 和 Windows 的不同 jar。这两个库的所有调用和返回都是相同的,只需在编译后替换 lib 目录中的 jar 文件即可,但我希望我的应用程序能够确定应在运行时加载哪个 jar。

我在这里找到了类似的帖子,但没有直接解决这个问题。 this post展示了如何通过 ClassLoader 动态加载 jar,但根据我收集的信息,这意味着我必须使用 Method method = clazz.getDeclaredMethod("methodName") , method.invoke()方法来调用该类提供的任何方法,以及显式调用要加载到类加载器的每个类(我非常希望避免这种情况)。

我希望找到一个类似于以下内容的解决方案:

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();
}
}

最佳答案

您引用的帖子有关于 JCL ClassLoader 框架的答案 - 请参阅 https://stackoverflow.com/a/1450837/982341

如果您查看该框架的文档,您会发现它支持创建加载类的实例,并提供将它们转换为正确对象的方法,以便您不必使用反射。

关于java - 根据操作系统动态加载 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609332/

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