Справочник по командной строке
В примерах на этой странице используется команда 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; по умолчанию имя входного файла, для пакетов tomcat — tomcat |
--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.