JavaFX 애플리케이션 보호
일반 Java 애플리케이션과 Spring Boot 데스크톱 애플리케이션 모두에서 JavaFX를 활성화할 수 있습니다. P4JX의 경량 런타임에는 기본적으로 JavaFX가 포함되어 있지 않으므로, 패키징할 때 명시적으로 또는 호환성 검사를 통한 권장 사항에 따라 활성화해야 합니다.
1. GUI 작업
-
일반 JavaFX 애플리케이션의 경우 애플리케이션 유형 페이지에서 Java Application를 선택하고, Spring 컨테이너를 사용하는 JavaFX 데스크톱 애플리케이션의 경우 Spring Boot를 선택합니다. Library Encryption는 보호된 아카이브만 생성하며, JavaFX 애플리케이션 패키징을 대체할 수 없습니다.

-
입력할 JAR 파일, 포함된 Java 버전, 목표 플랫폼을 선택한 다음, 간단 모드 또는 고급 모드를 선택합니다. JavaFX 관련 자료는 각 목표 Java 버전 및 플랫폼에 맞게 별도로 가져오며, 다중 플랫폼 작업의 경우 서로 독립적인 출력 패키지가 생성됩니다.

-
간단 모드를 사용할 때 호환성 스캔 과정에서
javafx.*에 대한 참조나 JavaFX 의존성이 발견되면, 스캔 결과에 조정 이유를 명시하고 자동으로 JavaFX를 활성화합니다. 또한javafx.scene.web가 발견될 경우 WebView도 함께 포함됩니다. 이 스캔은 정적 힌트 기반 분석이므로, 출력 페이지로 이동한 후에도 JavaFX 관련 요약 내용을 다시 확인해야 합니다. -
고급 모드를 사용할 때는 JavaFX runtime 탭에서 Bundle JavaFX into the packaged runtime를 선택한 다음, WebView 전략을 지정합니다:
- Auto: 애플리케이션이
javafx.scene.web를 참조하는지 여부에 따라 자동으로 판단됩니다. - Include: WebView 포함을 강제함(
fx-webkit); - Exclude: WebView 미포함을 강제함.
일반 Java 애플리케이션의 진입점은 다음과 같습니다:

Spring Boot 데스크톱 애플리케이션은 동일한 탭을 사용합니다:

- Auto: 애플리케이션이
-
출력 디렉토리를 선택한 후, 파라미터 요약에서 JavaFX가 내장된 상태로 표시되고 WebView 상태가 예상대로 되는지 확인한 뒤 Run protection를 클릭합니다. 생성된 파일은 패키지 내의 시작 스크립트를 사용하여 각 목표 플랫폼에서 윈도우, FXML, CSS/이미지 리소스 및 WebView를 검증합니다.
WebView 자료의 크기는 약 40 MB이며, 사용하지 않을 경우 Exclude를 선택하여 패키지 크기를 줄일 수 있습니다. 고급 인터페이스의 다른 설정들에 대한 의미는 Protector4J 고급 모드 설정 및 Spring Boot 설정를 참조하십시오.
2. CLI는 온라인에서 가져올 수 있습니다.
p4j javaapp fx-app.jar dist --javafx
Spring Boot JavaFX:
p4j springboot fx-boot.jar dist --javafx
WebView의 포함 또는 제외를 강제함:
--javafx-webview
--no-javafx-webview
이 도구는 대상 Java 훈련 데이터와 플랫폼에 따라 현재 지역의 공개 다운로드 사이트에서 해당 자료를 가져옵니다. JavaFX 다운로드와 VLX JRE 다운로드 모두 클라이언트에 클라우드 스토리지 키를 전달할 필요가 없습니다.
3. 오프라인 자료
CLI는 로컬 디렉토리를 지원합니다:
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
디렉토리에는 다음이 포함될 수 있습니다:
fx-core.tar.gz와 선택적으로fx-webkit.tar.gz; 또는lib/를 루트로 하는 확장된 JavaFX 파일 트리.
GUI는 로컬 JavaFX 디렉토리 선택 기능을 제공하지 않습니다. 오프라인 환경에서는 CLI를 사용해야 합니다.
4. FXML
애플리케이션이 FXMLLoader를 사용하는 경우, 호환성 스캔에서는 스캐너의 ZIP overlay 기능을 켜도록 권장합니다:
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
FXML 관련 리소스, 컨트롤러 서명 및 프레임워크 스캔은 대상 플랫폼에서 실제 실행 테스트를 거쳐야 합니다.
5. Java 8 및 Java 11+
- Java 8의 경우
jfxrt.jar/확장 디렉터리 모델을 사용하며, 스크립트 생성 시 일반적으로 모듈 매개변수가 필요하지 않습니다. - Java 11+의 경우 모듈형 JavaFX JAR을 사용하여 스크립트가 자동으로 전용 module path와
--add-modules를 설정합니다.
항상 생성된 run.sh, run.command 또는 run.bat를 사용해야 하며, vlxjre/lib 전체를 직접 module path로 사용해서는 안 됩니다.
6. 자동 경계 감지
디텍터는 자체적인 클래스 참조를 스캔하고, 의존하는 JAR 파일명을 기반으로 JavaFX를 판단합니다. 선택적 JavaFX 통합을 실제 사용으로 오인하지 않도록 모든 서드파티 의존성의 바이트코드까지 깊이 있게 스캔하지는 않습니다.
JavaFX가 이름만으로는 JavaFX임을 알 수 없는 의존성 안에 shade되어 있는 경우, 자동 스캔으로는 누락될 수 있으므로 이때는 명시적으로 --javafx를 사용해야 합니다.
7. 보호 범위 권장 사항
- JavaFX
Application서브클래스, FXML Controller 및 속성 모델의 보호 여부는 대상 Java 버전의 실제 테스트 결과를 기준으로 결정해야 합니다. - JNI/native를 통해 직접 접근하는 브리지 클래스는 일반 클래스로 유지해야 합니다.
- 먼저 단순 모드 또는
--compat-scan를 사용한 다음, 창 열기, FXML 로딩, CSS/이미지 리소스, WebView 및 플랫폼 native 라이브러리에 대해 회귀 테스트를 진행해야 합니다.