Собственные библиотеки
Проблема, с которой я столкнулся, состояла в том, чтобы сообщить JavaFX о своих собственных собственных библиотеках (.dll
, .dylib
, .so
и т. Д.).К счастью, загрузить dylibs так же просто, как установить java.library.path
с помощью System.setProperty(...)
.
Исторически установка этой переменной считается бессмысленной в Java, поскольку для загрузчика классов это слишком поздно (уступает -Djava.library.path
) и принудительное использование рефлексии является запрещенным нарушением безопасности, поскольку Java 10 ... к счастью, JavaFX фактически учитывает эту переменную естественным образом без каких-либо нарушений или взломов и подхватит ее послеон установлен.
// Detect the path to the currently running jar
String jarPath = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()).getCanonicalPath();
// Fix characters that get URL encoded when calling getPath()
jarPath = URLDecoder.decode(jarPath, "UTF-8");
String parentFolder = new File(jarPath).getParent();
// If libglass.dylib is next to the jar in a folder called "/bin"
System.setProperty("java.library.path", parentFolder + "/bin");
// ... then make any javafx calls
Библиотеки Java
Естественно, файлы .jar
также должны быть доступны.Я делаю это так же, как и любой java-пакет, архивируя их в дистрибутив (делая один большой .jar
файл)
Эти .jar
файлы должны соответствовать всемJavaFX 11 распространяется и должен быть соответствующим образом упакован.
javafx-swt.jar
javafx.base.jar
javafx.controls.jar
javafx.fxml.jar
javafx.graphics.jar
javafx.media.jar
javafx.swing.jar
javafx.web.jar
Совместимость с Java 8
Первоначальные тесты на Java 8 с использованием описанной выше техники являются положительными.На данный момент я использую определение версии Java (не включено в приведенный выше пример) и ТОЛЬКО параметр java.library.path
для Java 11 или выше.Java 8 - это EOL для личного использования, декабрь 2019 года (EOL для коммерческого использования, январь 2019 года), поэтому важно обеспечить совместимость при переходе клиентов с одного выпуска LTS на другой.