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

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

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

-
Выберите каталог выходных файлов, проверьте краткое описание параметров, затем нажмите 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.