Proteção de aplicativos JavaFX

O JavaFX pode ser habilitado tanto em aplicativos Java comuns quanto em aplicativos desktop Spring Boot. O runtime simplificado do P4JX não inclui JavaFX por padrão e deve ser ativado explicitamente durante a compilação ou por meio de recomendações de compatibilidade.

1. Operações GUI

  1. Para aplicativos JavaFX comuns, selecione Java Application na página de tipo de aplicativo; para aplicativos desktop JavaFX que utilizam o container Spring, selecione Spring Boot. Library Encryption gera apenas um arquivo de proteção e não pode substituir a compilação de um aplicativo JavaFX.

    Selecione Java Application ou Spring Boot

  2. Selecione o JAR de entrada, Versão Java incluída no pacote e a plataforma de destino, e escolha entre o modo simples ou o modo avançado. Os recursos do JavaFX são obtidos separadamente para cada versão e plataforma Java alvo; tarefas multiplataforma geram pacotes de saída independentes.

    Selecione a entrada, a versão do Java, a plataforma de destino e o modo

  3. No modo simples, se a varredura de compatibilidade encontrar referências a javafx.* ou dependências do JavaFX, explicará os motivos das alterações no resultado da varredura e ativará automaticamente o JavaFX; se javafx.scene.web for detectado, também será incluído o WebView. A varredura é uma análise heurística estática, portanto, é necessário verificar novamente o resumo do JavaFX na página de saída.

  4. No modo avançado, marque Bundle JavaFX into the packaged runtime na aba JavaFX runtime e, em seguida, escolha a estratégia para o WebView:

    • Auto: É determinado automaticamente com base em se o aplicativo faz referência a javafx.scene.web.
    • Include: Inclusão obrigatória do WebView (fx-webkit);
    • Exclude: Exclusão obrigatória do WebView.

    O ponto de entrada para aplicações Java comuns é o seguinte:

    Selecione o JavaFX runtime entre os parâmetros avançados de aplicativos Java comuns

    Aplicações desktop Spring Boot utilizam a aba com o mesmo nome:

    Selecione o runtime do JavaFX nas configurações avançadas do Spring Boot

  5. Após selecionar o diretório de saída, confirme que JavaFX aparece como já integrado no resumo dos parâmetros e que o status do WebView está de acordo com o esperado; em seguida, clique em Run protection. Após a geração, use os scripts de inicialização contidos no pacote para verificar janelas, recursos FXML, CSS/imagens e o WebView em cada plataforma-alvo.

Os materiais do WebView ocupam aproximadamente 40 MB; caso não sejam utilizados, é possível escolher Exclude para reduzir o tamanho do pacote. As significados das outras configurações na interface avançada podem ser encontrados em Configurações do modo avançado do Protector4J e Configuração do Spring Boot.

2. Obtenção online via CLI

p4j javaapp fx-app.jar dist --javafx

Spring Boot JavaFX:

p4j springboot fx-boot.jar dist --javafx

Inclusão ou exclusão obrigatória do WebView:

--javafx-webview
--no-javafx-webview

A ferramenta obtém os materiais correspondentes dos sites de download públicos da região atual, de acordo com a linha de treinamento Java e a plataforma alvo. Nem o download do JavaFX nem o download do VLX JRE exigem que a chave de armazenamento em nuvem seja entregue ao cliente.

3. Materiais offline

O CLI suporta diretórios locais:

p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx

O diretório pode conter:

  • fx-core.tar.gz e o opcional fx-webkit.tar.gz; ou
  • Uma estrutura de arquivos JavaFX expandida, com lib/ como raiz.

A GUI não oferece opção de seleção de diretório JavaFX local; use o CLI para cenários offline.

4. FXML

Se o aplicativo usar FXMLLoader, a verificação de compatibilidade sugerirá ativar o scanner ZIP overlay:

p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner

Os recursos relacionados a FXML, a assinatura dos controladores e a varredura do framework precisam passar por testes de inicialização reais na plataforma-alvo.

5. Java 8 e Java 11+

  • O Java 8 utiliza o modelo de diretório jfxrt.jar/extension, e a geração de scripts geralmente não requer parâmetros de módulo.
  • O Java 11+ utiliza JARs modularizados do JavaFX; a geração de scripts define automaticamente um path de módulo específico e o --add-modules.

Sempre utilize os arquivos run.sh, run.command ou run.bat gerados, e não use o vlxjre/lib inteiro como path de módulo por conta própria.

6. Detecção automática de limites

O detector escaneia suas próprias referências a classes e identifica o JavaFX com base nos nomes dos arquivos JAR de dependência. Ele não realiza uma varredura aprofundada no bytecode de todas as dependências de terceiros, a fim de evitar que integrações opcionais do JavaFX sejam identificadas erroneamente como sendo usadas efetivamente.

Se o JavaFX for incluído em uma dependência cujo nome não indica sua presença, a varredura automática pode falhar em detectá-lo; nesse caso, utilize explicitamente o --javafx.

7. Recomendações para o escopo de proteção

  • A determinação se subclasses do JavaFX Application, controladores FXML e modelos de propriedades devem ser protegidos deve seguir os resultados de testes na versão específica do Java alvo.
  • As classes de ponte para acesso direto via JNI/native devem permanecer como classes comuns.
  • Primeiro, use o modo simples ou o --compat-scan, e depois realize testes de regressão para a abertura de janelas, carregamento de FXML, recursos CSS/imagens, WebView e bibliotecas nativas da plataforma.