【发布时间】:2016-10-13 16:51:33
【问题描述】:
如果你想加载一个类的多个版本,如果它们实现了一个共享接口并且在单独的 JAR 中,你可以这样做,using a separate class loader for each version。
如果您有一个调用本机代码的 JAR,您可以将本机代码的共享库 (DLL) 存储在其 JAR by extracting the shared library to a temporary file and then using System.load to load the library from the temporary file 中。
但如果你两者都做,会奏效吗?如果 JAR 的两个版本都调用本机代码,并且都包含不同版本的共享库,会发生什么情况?
让我们假设两个 JAR 使用不同的临时文件来存储共享库的副本。但是共享库的两个版本具有调用具有相同声明的本机 (C) 函数的本机代码(但这些函数的实现不同)。 JVM/类加载器/System.load 会从 Java 代码委托给正确的本机代码吗?或者JVM会抱怨名称冲突吗?
如果该方案确实失败,我如何如何使用使用本机代码的类的多个版本?
【问题讨论】:
标签: java java-native-interface shared-libraries classloader