Защита обычных Java-приложений

javaapp предназначен для обычных Java-приложений с главным классом. Он генерирует защищённый архив, VLX JRE для целевой платформы и скрипт запуска.

1. Работа с GUI

  1. На странице типа приложения выберите Java Application.

    Выбор Java-приложения

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

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

  3. В расширенном режиме заполните Main class по мере необходимости и настройте параметры JVM, JavaFX и правила исключения; на этой странице можно пропустить шаг в простом режиме. Значение каждого параметра описано в Настройки режима «Продвинутый» для Protector4J.

    Настройка продвинутых параметров обычного Java-приложения

  4. Выберите каталог выходных файлов, проверьте краткое описание параметров, затем нажмите Run protection.

    Выберите каталог выхода и выполните процедуру защиты

2. Примеры использования CLI

Когда в Manifest уже содержится правильный Main-Class:

p4j javaapp app.jar dist

Если в Manifest отсутствует Main-Class или необходимо использовать другой класс запуска, это указывается с помощью --main:

p4j javaapp app.jar dist --main com.example.Main

Одновременное указание класса запуска и параметров JVM:

p4j javaapp app.jar dist \
  --main com.example.Main \
  --jvm-option -Xms512m \
  --jvm-option -Xmx2g

Избирательная защита:

p4j javaapp app.jar dist \
  --protect 'com.example.core.**' \
  --exclude 'com.example.core.dto.**'

Сканирование совместимости и автоматическое применение рекомендаций:

p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply

Эти два варианта нельзя использовать одновременно; их различия заключаются в следующем:

ПараметрыПоведениеКогда использовать
--compat-scanСканирует только входной JAR, выводит информацию о рисках и рекомендации по настройкам, после чего завершает работу; не выполняет кодирование и не генерирует dist, поэтому каталог вывода не требуетсяИспользуется для просмотра отчёта после первой защиты приложения, обновления зависимостей или изменения области защиты, а также при устранении проблем совместимости
--compat-applyПосле сканирования автоматически объединяет консервативные рекомендации, затем продолжает кодирование и генерацию вывода, поэтому обязательно необходимо указать каталог выводаИспользуется для завершения пакетирования после просмотра результатов сканирования и принятия автоматических рекомендаций; также может применяться при повторной сборке с уже проверенными правилами или в процессах CI

Для javaapp и --compat-apply можно добавить классы исключения на основе результатов сканирования, а также настроить такие параметры, как ZIP overlay, JavaFX и суффиксы архивов. Для последних трёх параметров приоритет имеют значения, явно указанные в командной строке; рекомендуемые классы исключения по умолчанию объединяются с явно указанными в --exclude. Если не хотите, чтобы классы исключения добавлялись автоматически, можно одновременно указать --no-compat-excludes. Сканер выполняет только статический гиперстимулированный анализ, проблемы, требующие изменения кода, не будут автоматически исправлены --compat-apply, и после генерации всё равно необходимо провести тестирование на целевой платформе

Для других команд CLI, всех параметров, переменных окружения и примеров автоматизации см. Справка по параметрам CLI

3. Структура вывода

dist/
├── app.p4jx              # или --archive-suffix jar для генерации app.jar
├── vlxjre/               # среда выполнения, совместимая с архивом и целевой платформой
├── lib/                  # зависимости от Manifest Class-Path, факультативно
├── run.sh
├── run.command
├── run.bat
└── README.md

Ресурсы, не являющиеся классами, хранятся в общем виде ресурсов P4JX. Для сканера защищённые классовые ресурсы отображаются только в виде метаданных; реальное тело методов может загружаться только во время выполнения VLX.

4. Запуск

./run.sh [параметры приложения...]

Windows:

run.bat [параметры приложения...]

Не заменяйте JRE системы на файл vlxjre, находящийся в каталоге вывода. Если запуск необходим вручную, сохраните его классовый путь, параметры JVM и параметры модулей JavaFX, используя генерированный скрипт в качестве шаблона.

Параметры запуска JVM

Во время пакетирования можно вводить по одному параметру на строку в JVM startup options в интерфейсе GUI или использовать их повторно в CLI:

--jvm-option -Xms512m --jvm-option -Xmx2g

Постоянные изменения текущей директории после развертывания:

  • macOS/Linux: отредактируйте run.sh, добавьте JVM_OPTS+=("-Xms512m" "-Xmx2g") перед проверкой в APP_JAVA_OPTS; run.command вызовет тот же файл run.sh.
  • Windows: отредактируйте run.bat, добавьте set "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g" перед проверкой в APP_JAVA_OPTS.

Временные параметры могут быть внесены с помощью APP_JAVA_OPTS. Полные примеры и рекомендации смотрите в Настройка параметров запуска JVM. Изменения, внесённые вручную в скрипты, будут перезаписаны при повторной сборке.

5. Рекомендуемая область защиты

Тип по умолчанию для защищённого приложения. Для производственных проектов рекомендуется явно указывать собственные пакеты бизнес-логики:

--protect 'com.mycompany.product.**'

Как правило, следует исключить:

  • DTO и record, используемые для прямой сериализации/десериализации в Jackson;
  • Классы, в которых через JNI осуществляется доступ к полям или методам;
  • Классы, требующие переписывания в рамках ORM, фреймворков инъекции зависимостей или прокси;
  • Сторонние библиотеки и open-source фреймворки;
  • Класс, который должен быть переопределён из массива байт с помощью пользовательского ClassLoader.

6. Приставки .p4jx и .jar

p4j javaapp app.jar dist --archive-suffix jar

Этот параметр изменяет только имя файла, а содержимое архива остаётся P4JX. Используется только тогда, когда сторонние компоненты жёстко задают значение .jar в URL или имени файла; это не превращает архив в обычный ZIP/JAR.