首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据操作系统动态加载jar

根据操作系统动态加载jar
EN

Stack Overflow用户
提问于 2012-03-08 05:27:26
回答 2查看 980关注 0票数 1

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

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

我希望找到一个类似这样的解决方案:

代码语言:javascript
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2012-03-08 09:28:41

您提到的帖子中有一个关于JCL ClassLoader框架的答案--请参阅https://stackoverflow.com/a/1450837/982341

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

票数 0
EN

Stack Overflow用户

发布于 2013-08-08 19:28:59

代码语言:javascript
复制
System.getProperty("os.name") 

不能每次都用于获取有关操作系统的信息。如果调用JVM的用户没有所需的安全权限,则会失败,并引发SecurityException异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9609332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档