Настройки расширенного режима Protector4J
Расширенный режим позволяет вручную задать область защиты, параметры совместимости и параметры, свойственные каждому типу приложения. Обрабатывая новое приложение впервые, начните с простого режима либо выполните сканирование совместимости на странице расширенных параметров и настройте всё по его результатам.
Эта страница подробно раскрывает раздел о расширенном режиме из Руководства по графическому интерфейсу. Как решить, какие классы оставить без защиты, описано в разделе Совместимость и область защиты; равнозначная команда для автоматизации — в Справочнике по командной строке.
1. Переход в расширенный режим
- Выберите тип приложения и входной JAR или WAR.
- Выберите поставляемую версию Java и хотя бы одну целевую платформу.
- В поле Режим выберите Расширенный — настройте параметры самостоятельно.
- Нажмите Следующий, чтобы открыть страницу расширенных параметров.
Если вы уже на странице проверки вывода, нажмите Настройка..., чтобы вернуться к расширенным параметрам. После изменений вернитесь на страницу вывода и убедитесь, что сводка их отражает.
Версию Java и целевые платформы на странице расширенных параметров изменить нельзя — для этого вернитесь на страницу ввода. Задача с несколькими платформами создаёт отдельный вывод для каждой, и их каталоги vlxjre не взаимозаменяемы.
2. Общие параметры
Все четыре типа приложений используют этот раздел, хотя часть настроек действует только для определённых типов. Шифрование библиотеки не создаёт сценариев запуска, поэтому параметров запуска JVM у него нет; настройка суффикса служит для подсказки и согласования имени выходного файла.
| Настройка | По умолчанию | Что делает | Рекомендация |
|---|---|---|---|
| Суффикс архива | p4jx | Называет архив приложения .p4jx или .jar | Оставьте .p4jx. Переходите на jar, только если сторонний компонент жёстко ожидает имя .jar. |
| Отключить JIT для защищённых методов | Выключено | Оставляет защищённые методы только в интерпретаторе | Включайте для особо чувствительного кода, оценив потери в быстродействии. |
| Добавить ZIP-слой для сканеров | Выключено | Добавляет представление совместимости для средств, читающих структуру ZIP | Включайте, только если это советует сканирование или приложение действительно читает физическую структуру ZIP. |
| Параметры запуска JVM | Пусто | Записывает параметры JVM в создаваемые сценарии запуска | Вводите по одному целому параметру в строке. |
| Сканирование совместимости... | Само не запускается | Сканирует ввод и даёт осторожные рекомендации | Повторяйте для каждого нового приложения, после обновления фреймворка и после изменения области защиты. |
Параметры, свойственные каждому типу:
| Тип приложения | Свои параметры | Исходное состояние | Параметры командной строки |
|---|---|---|---|
| Java приложение | Основной класс, классы для исключения, JavaFX и WebView | Основной класс берётся из манифеста; исключений нет; JavaFX не включается | --main, --exclude, --javafx, --javafx-webview / --no-javafx-webview |
| Spring Boot | Основной класс, макет, защита JAR зависимостей, классы для исключения, JavaFX и WebView | Основной класс берётся из Start-Class; макет p4jx-fat; зависимости не защищаются; исключений нет; JavaFX не включается | --main, --layout, --protect-lib, --exclude и параметры JavaFX |
| Tomcat | Версия Tomcat, контекстный путь, классы для исключения | Версия не выбрана; путь /app; исключений нет | --tomcat-version, --context, --exclude |
«Исключений нет» означает, что по умолчанию защищаются все классы приложения этого типа. Это не значит, что защищаются и сторонние зависимости: BOOT-INF/lib в Spring Boot и WEB-INF/lib в Tomcat остаются вне защиты.
Суффикс архива
Выбор jar меняет только имя; содержимое остаётся форматом P4JX. Обычными средствами ZIP или JAR его не открыть, стандартная JRE его не загрузит. При шифровании библиотеки эта настройка переключает суффикс выходного файла между .p4jx и .jar; если вы вписали другой суффикс, сохраняется указанное вами имя.
Параметр командной строки:
--archive-suffix p4jx
--archive-suffix jar
Отключить JIT для защищённых методов
Настройка Отключить JIT для защищённых методов не пускает такие методы в JIT-компилятор, благодаря чему наружу попадает меньше скомпилированного машинного кода. Вычислительно нагруженный код при этом может заметно замедлиться. Настройка влияет только на защищённые методы и не переводит всю JVM в режим интерпретации.
Параметр командной строки:
--no-jit
ZIP-слой для сканеров
Слой раскрывает только публичные ресурсы, каталоги и заготовки метаданных защищённых классов — но никогда настоящие тела методов. Он нужен, чтобы продолжали работать средства, читающие центральный каталог ZIP напрямую. Он не заменяет макет fat из Spring Boot и не помогает, когда архив разбирают из потока в памяти через ZipInputStream или JarInputStream.
Параметр командной строки:
--zip-overlay scanner
Параметры запуска JVM
Вводите по одному целому параметру в строке, например:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
Каждая строка — один параметр; никогда не пишите два в одной строке. Параметры записываются в сценарии запуска для macOS, Linux и Windows, а для Tomcat — ещё и в его путь запуска. Шифрование библиотеки сценариев запуска не создаёт, поэтому поле там недоступно. Более полные примеры по платформам приведены в разделе Параметры запуска JVM.
В командной строке параметр повторяется:
--jvm-option -Xms512m --jvm-option -Xmx2g
3. Сканирование совместимости и его рекомендации
Для всех четырёх типов пункт Сканирование совместимости... проверяет текущий ввод. Если принять результат, средство добавит к вашим настройкам рекомендации, свойственные этому типу, а именно:
- добавит классы, которые следует оставить без защиты;
- включит ZIP-слой для сканеров;
- изменит суффикс архива;
- включит JavaFX и WebView для приложения Java или Spring Boot;
- выберет макет для Spring Boot;
- выберет Tomcat 9 или 10.1.
При шифровании библиотеки применяются только рекомендации по ZIP-слою и суффиксу. Этот режим рассчитан на защиту всех классов входного JAR и исключений не поддерживает; поэтому, если сканирование найдёт то, что должно остаться незащищённым, — например классы JNI или нативные, — отчёт посоветует перенести такие классы в обычный JAR либо перейти к режиму сборки с выборочной защитой.
После принятия рекомендаций редактирование можно продолжить. Сканирование сохраняет уже заданные правила исключения и не отключает JavaFX, который вы включили вручную, лишь потому, что само его не обнаружило. Отмена диалога не применяет ничего.
Риски уровня кода, отмеченные в отчёте, — агенты, JNI, собственные загрузчики классов, изменение байт-кода во время выполнения — обычно не решаются переключением настройки. Опираясь на раздел Совместимость и область защиты, сдвиньте границы в своём коде и проверьте всё на практике.
4. Параметры приложения Java

Основной класс
Если поле пустое, Main-Class читается из манифеста входного JAR. Полное имя класса вводите, только если в манифесте главного класса нет или его нужно переопределить — например com.example.Main.
Параметр командной строки: --main com.example.Main.
Классы для исключения
По умолчанию защищаются все классы приложения. Перечисленные здесь классы и пакеты остаются без защиты — это подходит для DTO, сущностей, классов конфигурации, мостов JNI и всего, что дополняет фреймворк или что должно читать собственный настоящий байт-код. Запись правил описана ниже, в разделе «Область защиты и правила исключения».
Среда выполнения JavaFX
Для обычного приложения JavaFX отметьте Включить JavaFX в упакованную среду выполнения. Для WebView есть три варианта:
- Авто (обнаружить javafx.scene.web) — включается, только если обнаружен
javafx.scene.web; - Включить —
fx-webkitдобавляется всегда; - Исключить — не добавляется никогда.
WebView прибавляет около 40 МБ. Интерфейс загружает компоненты под вашу целевую версию Java и платформу; чтобы указать локальный каталог JavaFX, воспользуйтесь командной строкой.
Параметры командной строки: --javafx, --javafx-webview, --no-javafx-webview. У варианта Авто отдельного параметра нет, поскольку решение принимает упаковщик по обращениям самого приложения.
5. Параметры Spring Boot

Основной класс
Если поле пустое, Start-Class читается из манифеста. Чтобы переопределить, введите полное имя класса.
Параметр командной строки: --main com.example.Application.
Макет
| Макет | Когда применять |
|---|---|
p4jx-fat | По умолчанию. Обычные службы Spring Boot, самая широкая область защиты. |
fat | Приложению нужна физическая структура JAR Spring Boot — например при ClassGraph или Reflections. |
separate | Старые среды интеграции, требующие плоского пути классов lib/*. |
Если сканирование прямо советует fat, не навязывайте p4jx-fat в расчёте на ZIP-слой. Подробности о макетах — в разделе Защита приложений Spring Boot.
Параметры командной строки: --layout p4jx-fat, --layout fat, --layout separate.
Защитить JAR зависимостей…
Зависимости в BOOT-INF/lib по умолчанию не защищаются. Отмечайте только собственные зависимости с закрытым исходным кодом; не шифруйте сторонние фреймворки — Spring, Tomcat, библиотеки журналирования, драйверы баз данных. Подписанные JAR выбрать нельзя: их изменение нарушило бы подпись.
При выборе зависимости защищаются все её классы, но с помощью пункта Классы для исключения отдельные классы или пакеты внутри неё всё равно можно оставить без защиты. Защита зависимостей работает во всех трёх макетах Spring Boot.
Параметр командной строки: --protect-lib 'company-core.jar,company-domain.jar'. Командная строка принимает и шаблоны glob; интерфейс запоминает точные имена выбранных JAR.
Классы для исключения и JavaFX
Работают так же, как и для приложения Java. Правила исключения действуют и на классы приложения, и на выбранные для защиты JAR зависимостей. Настольное приложение Spring Boot тоже может включить JavaFX и WebView на вкладке Среда выполнения JavaFX.
6. Параметры Tomcat

Версия Tomcat
- Если WAR использует
javax.servlet.*, выберите Tomcat 9 · javax. - Если используется
jakarta.servlet.*, выберите Tomcat 10.1 · jakarta.
Tomcat 10.1 требует Java 11 или новее. Если сомневаетесь, выполните сканирование совместимости. Когда приложение использует и javax, и jakarta, не навязывайте версию — сначала устраните конфликт зависимостей.
Расширенный режим не выбирает версию заранее: чтобы продолжить, нужно принять рекомендацию сканирования или выбрать версию самостоятельно. Параметры командной строки: --tomcat-version 9 или --tomcat-version 10; командная строка принимает также auto.
Контекстный путь
Введите путь развёртывания, начиная с /, например /app. Если поле пустое, используется /app. При добавлении приложения в существующий каталог вывода Tomcat путь не должен совпадать с путём другого приложения.
Параметр командной строки: --context /app.
Классы для исключения
По умолчанию защищаются классы приложения в WEB-INF/classes, а WEB-INF/lib остаётся вне защиты. Сервлеты, фильтры, слушатели, DTO, классы конфигурации, сущности, мосты JNI и всё, что должен дополнять контейнер, обычно исключают.
7. Область защиты и правила исключения
В расширенном режиме интерфейс по умолчанию защищает все классы приложения, а границу с фреймворком вы проводите через Классы для исключения. Поддерживаются три вида правил:
com.example.SecretService только этот класс
com.example.service.* только этот пакет, без вложенных
com.example.service.** этот пакет и все вложенные
Классы можно выбрать в дереве кнопкой Выбрать... либо ввести вручную кнопкой Добавить.... Выбор пакета по умолчанию охватывает и вложенные пакеты; запись .* ограничивает его самим пакетом. Для Spring Boot дерево классов показывает ещё и выбранные для защиты JAR зависимостей.
Рекомендуемое построение таково: публичная граница или точка входа фреймворка → обычный фасад или интерфейс → защищённая основная реализация. Не шифруйте все сторонние зависимости и точки входа фреймворка только ради того, чтобы защищённая часть выглядела крупнее.
8. Экспорт, повторное использование и итоговая проверка
Кнопка Экспортировать параметры... сохраняет файл задания p4j-task.yml, доступный для ручного редактирования. В нём фиксируются уже определённые параметры, но никогда — электронная почта и пароль учётной записи. Позже задание восстанавливается пунктом Загрузить файл задания в верхней части окна; этот же пункт по-прежнему читает сценарии p4j-encrypt-run.sh и .bat, экспортированные прежними версиями.
На странице вывода проверьте хотя бы следующее:
- входной файл, тип приложения, версию Java и все целевые платформы;
- суффикс архива, параметр JIT, слой для сканеров и параметры запуска JVM;
- JavaFX и WebView, макет Spring Boot либо версию Tomcat и контекстный путь;
- выбранные для защиты JAR зависимостей и все правила исключения;
- каталог вывода и то, создаётся ли новый подкаталог
p4jx-xxxx.
После сборки на каждой целевой платформе проверьте с помощью сценария запуска из пакета сам запуск, обход фреймворка, сериализацию, рефлексию, загрузку ресурсов и основные бизнес-сценарии. Правильно выставленные расширенные параметры означают лишь, что задание настроено верно, — они не заменяют проверку готового продукта.