Я пытаюсь найти способ динамически загружать зависимую от платформы библиотечную флягу для текущей ОС.Мне нужен доступ к сторонней библиотеке, которая использует вызовы JNI и имеет разные jar-файлы для Mac и Windows.Все вызовы и возвраты для этих двух библиотек идентичны и просто заменяют файл jar в каталоге lib после компиляции работ, но я бы хотел, чтобы мое приложение могло определить, какой jar должен быть загружен во время выполнения.
Я нашел похожие посты здесь, но ничего, что напрямую касалось этого вопроса. этот пост показывает, как динамически загружать jar через ClassLoader, но из того, что я понял, это означает, что мне придется использовать подход 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();
}
}