Защита JavaFX-приложений

JavaFX может быть включён как в обычных Java-приложениях, так и в десктопных приложениях на Spring Boot. Сокращённая среда выполнения P4JX по умолчанию не содержит JavaFX, его необходимо явно включить во время пакетирования или согласно рекомендациям по проверке совместимости.

1. Работа с GUI

  1. Для обычных JavaFX-приложений на странице типа приложения выбирается Java Application; для JavaFX-десктопных приложений, использующих Spring-контейнер, — Spring Boot. Library Encryption генерирует только защищённый архив и не может заменить процесс пакетирования JavaFX-приложений.

    Выберите Java Application или Spring Boot

  2. Необходимо выбрать исходный JAR, Входящая версия Java и целевую платформу, затем выбрать простой или расширенный режим. Материалы JavaFX загружаются отдельно для каждой версии Java и платформы-цели; задания для нескольких платформ генерируют независимые пакеты результатов.

    Выберите способ ввода, версию Java, целевую платформу и режим работы

  3. В простом режиме, если сканирование совместимости обнаруживает ссылки на javafx.* или зависимости от JavaFX, в результатах сканирования указываются причины корректировок, и JavaFX автоматически включается; если обнаруживается javafx.scene.web, также добавляется WebView. Сканирование осуществляется с использованием статического гибридного анализа, поэтому после перехода на страницу результатов следует повторно проверить краткое описание JavaFX.

  4. В расширенном режиме на вкладке JavaFX runtime необходимо отметить опцию Bundle JavaFX into the packaged runtime, затем выбрать стратегию для WebView:

    • Auto: автоматически определяется в зависимости от того, использует ли приложение javafx.scene.web.
    • Include: обязательное включение WebView (fx-webkit);
    • Exclude: обязательное исключение WebView.

    Пункт входа для обычных Java-приложений приведен ниже:

    В разделе «Дополнительные параметры» обычного приложения Java выберите JavaFX runtime

    Для десктопных приложений на Spring Boot используется таб с тем же названием:

    Выберите среду выполнения JavaFX в разделе «Дополнительные параметры Spring Boot»

  5. После выбора каталога выхода убедитесь, что в кратком описании параметров JavaFX отображается как встроенный компонент, а статус WebView соответствует ожидаемому, затем нажмите Run protection. После генерации с помощью скрипта запуска из пакета проверяются окна, ресурсы FXML, CSS/изображения и WebView на каждой целевой платформе.

Размер материалов WebView составляет примерно 40 МБ; при их отсутствии можно выбрать Exclude для уменьшения размера пакета. Значение других настроек в расширенном интерфейсе описано в Настройки режима «Продвинутый» для Protector4J и Настройка Spring Boot.

2. CLI — получение онлайн

p4j javaapp fx-app.jar dist --javafx

Spring Boot JavaFX:

p4j springboot fx-boot.jar dist --javafx

Обязательное включение или исключение WebView:

--javafx-webview
--no-javafx-webview

Инструмент загружает необходимые ресурсы с публичных сайтов загрузки текущей области в зависимости от целевой линии обучения Java и платформы. Для загрузки JavaFX и VLX JRE не требуется передавать ключи облачного хранилища клиенту.

3. Офлайн-ресурсы

CLI поддерживает локальные каталоги:

p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx

Каталог может содержать:

  • fx-core.tar.gz вместе с необязательным fx-webkit.tar.gz; или
  • Раскрытую файловую структуру JavaFX с lib/ в качестве корня.

GUI не предоставляет возможности выбора локального каталога JavaFX; для офлайн-режима используйте CLI.

4. FXML

Если приложение использует FXMLLoader, сканирование совместимости рекомендует включить функцию ZIP overlay сканера:

p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner

Для ресурсов FXML, подписи контроллеров и сканирования фреймворка необходимо провести практические тесты запуска на целевой платформе.

5. Java 8 и Java 11+

  • В Java 8 используется модель каталогов jfxrt.jar/расширений; при генерации скриптов обычно не требуются параметры модуля.
  • В Java 11+ используются модульные JAR-файлы JavaFX; при генерации скриптов автоматически устанавливаются специальный module path и --add-modules.

Всегда используйте сгенерированные файлы run.sh, run.command или run.bat, не используйте весь файл vlxjre/lib в качестве module path.

6. Автоматическое обнаружение границ

Детектор сканирует собственные ссылки на классы и определяет наличие JavaFX по названиям зависимых JAR-файлов. Он не сканирует в деталях байт-код всех сторонних зависимостей, чтобы избежать ошибочного распознавания необязательных компонентов JavaFX как активно используемых.

Если JavaFX скомпилирован внутрь зависимости с именем, не указывающим на его принадлежность к JavaFX, автоматический скан может пропустить его; в таком случае необходимо явно использовать --javafx.

7. Рекомендации относительно области защиты

  • Необходимо убедиться, являются ли подклассы JavaFX Application, контроллеры FXML и модели свойств защищёнными, на основе реальных результатов тестирования для конкретной версии Java.
  • Классы-мосты, предназначенные для прямого доступа через JNI/native, должны оставаться обычными классами.
  • Сначала используйте простой режим или --compat-scan, затем проведите тесты на восстановление функционала для открытия окон, загрузки FXML, ресурсов CSS/изображений, WebView и нативных библиотек платформы.