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

В примерах на этой странице используется команда p4j, которая появляется после установки. В Windows графический интерфейс ставится из .exe, в macOS — из Protector4J.app внутри .dmg; способ установки интерфейса не меняет приведённый ниже синтаксис. Если установщик не добавил CLI в PATH, запускайте её из точки входа командной строки в каталоге установки Protector4J.

p4j --help

1. Команды

p4j encode     <input.jar> <output.p4jx|output.jar> [параметры]
p4j javaapp    <input.jar> <каталог вывода> [параметры]
p4j springboot <input.jar> <каталог вывода> [параметры]
p4j tomcat     <input.war> <каталог вывода> [параметры]

У низкоуровневой команды encode имя команды можно опустить:

p4j input.jar output.p4jx [параметры]

Параметры уровня запуска выбирают цель сборки. Их можно указать перед именем команды либо собрать в конце строки; экспортируемая интерфейсом командная строка использует второй вариант.

ПараметрОписание
--java-version <N>Поставляемая линейка Java: 8, 11, 17, 21 или 25. По умолчанию — 21
--target-platform <id>[,<id>...]Одна или несколько целевых платформ через запятую либо повторением параметра. По умолчанию — текущая платформа
--create-new-folderСоздаёт подкаталог p4jx-xxxxxxxx внутри каталога вывода. Только для javaapp, springboot и tomcat

Например:

p4j --java-version 21 --target-platform linux-x64 springboot app.jar dist
p4j springboot app.jar dist --java-version 21 --target-platform linux-x64

Обе команды равнозначны. Параметры уровня запуска нельзя вставлять между параметрами упаковщика: там они будут восприняты как неизвестные параметры упаковщика, и команда завершится ошибкой.

2. Общие параметры

ПараметрОписание
--jre-home <path>Выводит ключи из указанной итоговой среды выполнения P4JX. Команды более высокого уровня также копируют эту среду
--keys <keys.json>Использует явный файл закрытых ключей. Только для диагностики и внутренних процессов; никогда не распространяйте его вместе с приложением
--no-jitНе пускает защищённые методы в JIT и выполняет их в интерпретаторе
--zip-overlay off|scannerВыключает или включает представление совместимости ZIP для сканеров. По умолчанию — off
--compat-scanТолько сканирует и завершает работу; аргумент вывода не нужен
--compat-applyСканирует, применяет осторожные рекомендации и продолжает кодирование
--no-compat-excludesВместе с --compat-apply: не добавлять рекомендованные исключения автоматически
--native-compat jxbrowserТолько для javaapp и springboot: запрашивает допуск встроенного JxBrowser. Версия, платформа и пятиуровневый хеш по-прежнему проверяются полностью, никакие другие значения, пути и хеши не принимаются
--account-email <email>Электронная почта лицензированной учётной записи
--account-password <password>Пароль лицензированной учётной записи
--app-id <id>Идентификатор приложения
--license-expires-in <sec>Запрашиваемый срок пробной лицензии в секундах, в пределах политики сервера

Команды сборки более высокого уровня поддерживают дополнительно:

ПараметрОписание
--archive-suffix p4jx|jarСуффикс создаваемого архива, по умолчанию p4jx. Внутренний формат не меняется
--jvm-option <option>Записывает параметр в сценарии запуска для macOS, Linux и Windows. По одному параметру на ключ, ключ можно повторять. При включённом EXE для Windows те же параметры встраиваются и в него

3. encode

p4j encode input.jar output.p4jx [параметры]
ПараметрОписание
--bind-launcher <jar>Вычисляет SHA-256 для JAR средства запуска и привязывает его
--launcher-sha256 <hex>Передаёт SHA-256 средства запуска напрямую, для сложных интеграций
--runtime-major <N>Цель для представления ресурсов и сведе́ния многоверсионных JAR. По умолчанию — 21

--bind-launcher и --launcher-sha256 нельзя использовать вместе.

4. javaapp

p4j javaapp input.jar каталог-вывода [параметры]
ПараметрОписание
--main <class>Главный класс для запуска
--protect <rules>Правила для защищаемых классов и пакетов через запятую. По умолчанию — все классы
--exclude <rules>Правила того, что остаётся вне области защиты
--javafx [<dir>]Включает JavaFX, при желании из локального каталога компонентов
--javafx-webviewВсегда включать WebView
--no-javafx-webviewНикогда не включать WebView
--no-javafxЯвно отключить JavaFX
--native-compat jxbrowserЗаписывает ATTACH_THREAD для библиотек IPC из JxBrowser, точно совпадающих со встроенным каталогом. Только Java 17, 21 и 25

5. springboot

p4j springboot input.jar каталог-вывода [параметры]
ПараметрОписание
--main <class>Главный класс Spring Boot. По умолчанию читается из манифеста
--protect <rules>Защищает подходящие классы в BOOT-INF/classes
--exclude <rules>Оставляет подходящие классы или пакеты без защиты
--protect-lib <globs>Защищает подходящие JAR в BOOT-INF/lib, через запятую
--layout p4jx-fat|fat|separateМакет вывода, по умолчанию p4jx-fat
--javafx [<dir>]Включает JavaFX, при желании из локального каталога компонентов
--javafx-webviewВсегда включать WebView
--no-javafx-webviewНикогда не включать WebView
--no-javafxЯвно отключить JavaFX
--native-compat jxbrowserКак в javaapp; тот же сканер охватывает и вложенный BOOT-INF/lib

6. tomcat

p4j tomcat input.war каталог-вывода [параметры]
ПараметрОписание
--exclude <rules>Оставляет подходящие классы или пакеты в WEB-INF/classes без защиты
--context </path>Контекстный путь, по умолчанию /app
--append-appДобавляет приложение в существующий пакет Tomcat P4JX
--tomcat-version auto|9|10Автоопределение либо явная версия. В командной строке по умолчанию auto
--precompile-jspПринудительно предкомпилировать JSP
--no-precompile-jspОтключить предкомпиляцию JSP

7. Параметры EXE для Windows

javaapp, springboot и tomcat могут дополнительно создать нативное средство запуска Windows. Среди целевых платформ должна быть windows-x64, windows-x86 или windows-aarch64.

ПараметрОписание
--windows-exeСоздать EXE приложения для Windows. Без него EXE не создаётся
--exe-name <name>Имя файла EXE; по умолчанию имя входного файла, для пакетов tomcattomcat
--exe-mode <mode>console (по умолчанию) или gui
--exe-icon <ico>Необязательный значок Windows в формате .ico
--exe-file-version <a.b.c.d>Версия файла PE: от одного до четырёх чисел, каждое от 0 до 65535. Пустое поле равно 0.0.0.0
--exe-product-version <a.b.c.d>Версия продукта PE, правила те же
--exe-company <text>Название компании
--exe-product <text>Название продукта
--exe-description <text>Описание файла
--exe-copyright <text>Сведения об авторских правах

Любой параметр --exe-* сам по себе включает создание EXE. В задаче с несколькими платформами EXE получают только пакеты Windows; остальные собираются как обычно и сохраняют свои сценарии запуска.

p4j --target-platform windows-x64 javaapp app.jar dist --windows-exe --exe-name MyApp.exe --exe-mode gui

Полное описание, поведение при запуске и порядок подписи кода приведены в разделе Создание средства запуска Windows EXE.

8. Запись правил

com.example.SecretService   один класс
com.example.service         только этот пакет
com.example.service.*       только этот пакет
com.example.service.**      этот пакет и все вложенные
com/example/Secret.class    путь к записи класса

Несколько правил разделяются запятыми. Правила с * берите в кавычки, чтобы оболочка их не раскрыла:

--protect 'com.example.**' --exclude 'com.example.dto.**,com.example.config.**'

9. Переменные окружения

Переменные окружения удобны для общих значений в задании CI, в контейнере или в нескольких командах подряд. Когда конкретную сборку нужно зафиксировать и воспроизвести, указывайте значения явными параметрами.

ПеременнаяПараметр командной строкиОписание
P4JX_RUNTIME_JAVA_VERSION--java-version <N>Линейка Java для сборки верхнего уровня: 8, 11, 17, 21 или 25
P4JX_RUNTIME_PLATFORM--target-platform <id>Одна целевая платформа. Чтобы собрать сразу несколько, используйте параметр командной строки
P4JX_RUNTIME_CACHE_DIRнетПереопределяет каталог кеша загрузок VLX JRE
APP_JAVA_OPTSсравните с --jvm-optionДобавляет параметры JVM на один запуск созданного приложения. --jvm-option записывает их в сценарий при сборке, поэтому это не одно и то же

Если заданы и переменная, и соответствующий параметр, приоритет у явно указанного параметра. Переменные окружения поддерживаются в полном объёме, так что существующие сценарии автоматизации продолжают работать.

Например, чтобы задать общую цель для нескольких команд в текущей оболочке:

export P4JX_RUNTIME_JAVA_VERSION=21
export P4JX_RUNTIME_PLATFORM=linux-x64

p4j springboot service-a.jar release/service-a
p4j springboot service-b.jar release/service-b

Для сложных случаев, когда JAR упаковщика запускается напрямую, есть равнозначные системные свойства Java:

-Dp4jx.runtime.java.version=<N>
-Dp4jx.runtime.platform=<platform>
-Dp4jx.runtime.cache.dir=<dir>

10. Пример автоматизации

p4j --java-version 21 \
  --target-platform linux-x64 \
  springboot build/app.jar release/linux-x64 \
  --compat-apply \
  --protect 'com.example.service.impl.**' \
  --exclude 'com.example.dto.**,com.example.config.**' \
  --jvm-option -Xms1g \
  --jvm-option -Xmx2g \
  --app-id com.example.app

Явно заданные параметры защиты, исключения и макета имеют приоритет над автоматическими рекомендациями. Итоговые параметры, SHA-256 входного файла и версию средства стоит записать как сведения о происхождении выпуска.

Примеры для интерфейса и командной строки, а также правка run.sh, run.bat, сценариев запуска Tomcat и PowerShell приведены в разделе Параметры запуска JVM.