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

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

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

-
Выберите каталог вывода, просмотрите сводку и нажмите Запустить защиту.

2. Примеры для командной строки
Если в манифесте уже объявлен нужный Main-Class:
p4j javaapp app.jar dist
Если 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-слой, JavaFX и суффикс архива. Для этих трёх пунктов приоритет имеет значение, заданное явно в командной строке. Рекомендованные исключения по умолчанию объединяются с вашими шаблонами --exclude; если это не нужно, добавьте --no-compat-excludes. Сканер выполняет только статический эвристический анализ, поэтому проблемы, требующие правки кода, --compat-apply не устраняет, и собранное приложение всё равно нуждается в регрессионном тестировании на целевой платформе.
Остальные команды, полный список параметров, переменные окружения и примеры автоматизации приведены в Справочнике по командной строке.
3. Структура вывода
dist/
├── app.p4jx # с --archive-suffix jar становится app.jar
├── vlxjre/ # среда выполнения, соответствующая архиву и платформе
├── lib/ # зависимости из Class-Path манифеста, необязательно
├── run.sh
├── run.command
├── run.bat
└── README.md
Ресурсы, не являющиеся классами, хранятся в публичном представлении ресурсов архива P4JX. Защищённые классы показывают сканерам только заготовку метаданных; настоящие тела методов может загрузить лишь среда выполнения VLX.
4. Запуск
./run.sh [аргументы приложения...]
В Windows:
run.bat [аргументы приложения...]
Не заменяйте каталог vlxjre в выводе системной JRE. Если приложение всё же нужно запустить вручную, возьмите созданный сценарий за образец и сохраните его путь классов, параметры VM и параметры модулей JavaFX.
Для целей Windows можно дополнительно создать нативное средство запуска, работающее по двойному щелчку. Оно существует наряду со сценариями запуска — см. Создание средства запуска Windows EXE.
Параметры запуска JVM
При сборке вводите по одному параметру в строке в поле Параметры запуска JVM графического интерфейса либо повторяйте ключ в командной строке:
--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, контейнер внедрения зависимостей или фреймворк прокси;
- сторонние библиотеки и фреймворки с открытым исходным кодом;
- классы, которые собственный ClassLoader переопределяет из массива байтов.
6. Суффиксы .p4jx и .jar
p4j javaapp app.jar dist --archive-suffix jar
Этот параметр меняет только имя файла; содержимое архива остаётся форматом P4JX. Применяйте его лишь тогда, когда сторонний компонент жёстко ожидает .jar в URL или имени файла. Обычным ZIP или JAR архив от этого не становится.