Proteção de aplicações Java comuns
javaapp é usado para aplicações Java comuns que possuem uma classe principal. Ele gera um arquivo compactado protegido, o VLX JRE da plataforma de destino e um script de inicialização.
1. Operações GUI
-
Selecione Java Application na página de tipo de aplicação.

-
Escolha o JAR de entrada, Versão Java incluída no pacote e a plataforma de destino, e selecione o modo simples ou o modo avançado.

-
No modo avançado, preencha Main class conforme necessário e configure parâmetros da JVM, JavaFX e regras de exclusão; esse passo pode ser pulado no modo simples. As descrições de cada opção estão em Configurações do modo avançado do Protector4J.

-
Selecione o diretório de saída, revise o resumo dos parâmetros e, em seguida, clique em Run protection.

2. Exemplo CLI
Quando o Manifest já contém o correto Main-Class:
p4j javaapp app.jar dist
Quando o Manifest não possui Main-Class ou é necessário usar outro classe de inicialização, especifique por meio de --main:
p4j javaapp app.jar dist --main com.example.Main
Especifique simultaneamente a classe de inicialização e os parâmetros do JVM:
p4j javaapp app.jar dist \
--main com.example.Main \
--jvm-option -Xms512m \
--jvm-option -Xmx2g
Proteção seletiva:
p4j javaapp app.jar dist \
--protect 'com.example.core.**' \
--exclude 'com.example.core.dto.**'
Varredura de compatibilidade e sugestões automáticas de aplicação:
p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply
Essas duas opções não podem ser usadas ao mesmo tempo; a diferença entre elas é:
| Opção | Comportamento | Quando usar |
|---|---|---|
--compat-scan | Apenas escaneia o JAR de entrada, exibe riscos e sugestões de configuração e depois encerra; não codifica nem gera o dist, portanto não é necessário um diretório de saída | Use-o primeiro para visualizar relatórios após proteger uma aplicação pela primeira vez, atualizar dependências ou ajustar o escopo de proteção, bem como para resolver problemas de compatibilidade |
--compat-apply | Após o escaneamento, combina automaticamente as sugestões conservadoras e continua com a codificação e geração da saída, portanto é necessário especificar um diretório de saída | Use-o para concluir a compactação após ler os resultados do escaneamento e aceitar as sugestões automáticas; também pode ser usado em construções repetidas com regras já verificadas ou em fluxos CI |
Para o javaapp e --compat-apply, é possível adicionar classes de exclusão com base nos resultados do escaneamento e ajustar opções como ZIP overlay, JavaFX e sufixos de arquivamento. Para as últimas três opções, os valores especificados explicitamente na linha de comando têm prioridade; as classes de exclusão sugeridas são automaticamente combinadas com o --exclude por padrão. Se não desejar adicionar classes de exclusão automaticamente, é possível passar o --no-compat-excludes simultaneamente. O scanner realiza apenas análise heurística estática; problemas que exigem modificação no código não serão corrigidos automaticamente pelo --compat-apply, e testes de regressão ainda são necessários na plataforma-alvo após a geração
Para outras comandos CLI, todas as opções, variáveis de ambiente e exemplos de automação, consulte o Referência de parâmetros CLI.
3. Estrutura de saída
dist/
├── app.p4jx # ou --archive-suffix jar para gerar app.jar
├── vlxjre/ # tempo de execução compatível com a plataforma de arquivamento e de destino
├── lib/ # dependências de Manifest Class-Path, opcionais
├── run.sh
├── run.command
├── run.bat
└── README.md
Recursos que não são de classe são armazenados na visualização de recursos públicos do P4JX. Recursos de classe protegidos exibem apenas metadados para o scanner; o corpo real dos métodos só pode ser carregado pelo tempo de execução do VLX.
4. Iniciar
./run.sh [parâmetros do aplicativo...]
Windows:
run.bat [parâmetros do aplicativo...]
Não substitua o vlxjre no diretório de saída pelo JRE do sistema. Se for necessário iniciá-lo manualmente, mantenha seu classpath, parâmetros da VM e parâmetros de módulo JavaFX usando o script gerado como modelo.
Parâmetros de inicialização da JVM
Durante a compilação, é possível preencher um parâmetro por linha no JVM startup options da GUI ou reutilizá-los na CLI:
--jvm-option -Xms512m --jvm-option -Xmx2g
Alterar permanentemente o diretório atual após a implantação:
- macOS/Linux: edite o
run.she adicione oJVM_OPTS+=("-Xms512m" "-Xmx2g")antes da verificação emAPP_JAVA_OPTS; orun.commandchamará o mesmorun.sh. - Windows: edite o
run.bate adicione oset "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g"antes da verificação emAPP_JAVA_OPTS.
Parâmetros temporários podem ser injetados por meio de APP_JAVA_OPTS. Exemplos completos e observações estão disponíveis em Configuração de parâmetros de inicialização do JVM. Modificações feitas em scripts manuais serão substituídas durante a reempacotagem.
5. Recomendações para o escopo de proteção
Classe de aplicação com proteção padrão. Em projetos de produção, é recomendado definir explicitamente os pacotes de negócios próprios:
--protect 'com.mycompany.product.**'
Geralmente, os seguintes itens devem ser excluídos:
- DTOs e records de serialização/deserialização direta do Jackson;
- Clases cujos campos ou métodos são acessados por JNI;
- Clases que exigem reescrita em frameworks ORM, de injeção de dependências ou de proxy;
- Bibliotecas de terceiros e frameworks de código aberto;
- Classe que deve ser redefinida a partir de um array de bytes por meio de um ClassLoader personalizado.
6. Sufixos .p4jx e .jar
p4j javaapp app.jar dist --archive-suffix jar
Essa opção apenas altera o nome do arquivo; o conteúdo do arquivamento continua sendo P4JX. Deve ser utilizada somente quando componentes de terceiros codificam explicitamente .jar no URL ou no nome do arquivo; ela não transforma o arquivamento em um ZIP/JAR comum.