CLI 매개변수 참조
이 문서의 예제에서는 설치 후 제공되는 p4j 명령어가 사용됩니다. Windows GUI는 .exe를 통해 설치되며, macOS GUI는 .dmg 내의 Protector4J.app를 통해 설치됩니다. GUI의 설치 방식과는 상관없이 아래의 CLI 문법은 동일합니다. 설치 프로그램이 CLI를 PATH에 포함시키지 않은 경우, Protector4J 설치 디렉터리에 제공된 명령줄 인터페이스를 통해 실행해야 합니다.
p4j --help
1. 명령어
p4j encode <input.jar> <output.p4jx|output.jar> [options]
p4j javaapp <input.jar> <output-dir> [options]
p4j springboot <input.jar> <output-dir> [options]
p4j tomcat <input.war> <output-dir> [options]
하위 계층의 encode의 경우 명령어 이름도 생략할 수 있습니다:
p4j input.jar output.p4jx [options]
2. 일반 옵션
| 옵션 | 설명 |
|---|---|
--no-jit | 보호 방식인 JIT를 금지하고 인터프리터 실행으로 변경함 |
--zip-overlay off|scanner | 스캐너 ZIP 호환 뷰를 비활성화하거나 추가하며, 기본값은 off임 |
--compat-scan | 스캔만 수행한 후 종료하며, 출력 파라미터는 필요하지 않음 |
--compat-apply | 스캔한 후 보수적인 권장 사항을 적용한 뒤 인코딩을 계속함 |
--no-compat-excludes | --compat-apply와 함께 작동하며, 권장되는 제외 클래스를 자동으로 추가하지 않음 |
--account-email <email> | 라이선스 계정 이메일 주소 |
--account-password <password> | 라이선스 계정 비밀번호 |
--app-id <id> | 지정된 애플리케이션 식별자 |
--license-expires-in <sec> | 서버 정책에 따라 제한되는 트라이얼 유효 시간 요청 |
상위 수준 패키징 명령 지원:
| 옵션 | 설명 |
|---|---|
--archive-suffix p4jx|jar | 아카이브 파일의 파일 확장자 생성, 기본값은 p4jx이며 내부 형식은 변경되지 않음 |
--jvm-option <option> | macOS/Linux 및 Windows용 시작 스크립트 작성; 각 매개변수는 한 번만 사용되며 반복 가능 |
3. encode
p4j encode input.jar output.p4jx [options]
| 옵션 | 설명 |
|---|---|
--runtime-major <N> | 리소스 뷰/Multi-Release 플랫폼 목표 지정, 기본값은 21 |
4. javaapp
p4j javaapp input.jar output-dir [options]
| 옵션 | 설명 |
|---|---|
--main <class> | 주 실행 클래스 지정 |
--protect <rules> | 보호할 클래스/패키지 규칙을 쉼표로 구분하여 입력합니다. 기본적으로 모든 클래스가 적용됩니다. |
--exclude <rules> | 보호 범위에서 제외합니다. |
--javafx [<dir>] | JavaFX를 활성화합니다. 로컬 자료 디렉토리를 지정할 수 있습니다. |
--javafx-webview | WebView 포함을 강제합니다. |
--no-javafx-webview | WebView 제외를 강제합니다. |
--no-javafx | JavaFX를 명시적으로 비활성화합니다. |
5. springboot
p4j springboot input.jar output-dir [options]
| 옵션 | 설명 |
|---|---|
--main <class> | Spring Boot 메인 클래스 지정; 기본적으로 Manifest 읽기 |
--protect <rules> | BOOT-INF/classes에 포함된 일치하는 클래스 보호 |
--exclude <rules> | 클래스 또는 패키지 제외 |
--protect-lib <globs> | 일치하는 BOOT-INF/lib JAR 파일 보호, 쉼표로 구분 |
--layout p4jx-fat|fat|separate | 출력 레이아웃 지정, 기본값은 p4jx-fat |
--javafx [<dir>] | JavaFX 활성화; 선택적으로 로컬 자료 디렉토리 지정 가능 |
--javafx-webview | WebView 포함을 강제함 |
--no-javafx-webview | WebView 제외를 강제함 |
--no-javafx | JavaFX를 명시적으로 비활성화하기 |
6. tomcat
p4j tomcat input.war output-dir [options]
| 옵션 | 설명 |
|---|---|
--exclude <rules> | WEB-INF/classes에 포함된 클래스 또는 패키지 제외하기 |
--context </path> | 컨텍스트 경로, 기본값은 /app |
--append-app | 애플리케이션을 기존의 P4JX Tomcat 패키지에 추가하기 |
--tomcat-version auto|9|10 | 자동으로 버전 감지 또는 강제 지정, CLI의 기본값은 auto |
--precompile-jsp | JSP의 사전 컴파일을 강제하기 |
--no-precompile-jsp | 사전 컴파일된 JSP 사용 금지 |
7. 규칙 문법
com.example.SecretService 단일 클래스
com.example.service 직접 패키지 일치
com.example.service.* 직접 패키지 일치
com.example.service.** 패키지 및 모든 하위 패키지
com/example/Secret.class class 항목 경로
여러 규칙은 쉼표로 구분하며, shell에 *가 포함된 경우 따옴표를 붙여야 합니다:
--protect 'com.example.**' --exclude 'com.example.dto.**,com.example.config.**'
8. 환경 변수
| 변수 | 설명 |
|---|---|
P4JX_RUNTIME_JAVA_VERSION | 상위 레벨 패키징에 사용되는 Java 트레이닝 라인: 8/11/17/21/25 |
P4JX_RUNTIME_PLATFORM | 대상 플랫폼 ID |
P4JX_RUNTIME_CACHE_DIR | VLX JRE 다운로드 캐시 디렉터리 |
APP_JAVA_OPTS | 생성된 애플리케이션을 실행할 때 임시로 JVM 매개변수를 추가합니다. macOS/Linux와 Windows 모두에서 지원됩니다. |
Java 시스템 속성의 등가 항목을 사용하여 인코더 JAR를 직접 시작해야 하는 고급 시나리오에 적합합니다:
-Dp4jx.runtime.java.version=<N>
-Dp4jx.runtime.platform=<platform>
-Dp4jx.runtime.cache.dir=<dir>
9. 자동화 예제
P4JX_RUNTIME_JAVA_VERSION=21 \
P4JX_RUNTIME_PLATFORM=linux-x64 \
p4j 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 값, 도구 버전은 배포 내역으로 반드시 기록하는 것이 좋습니다.
GUI, CLI, run.sh/run.bat 직접 편집, Tomcat 시작 스크립트, Windows PowerShell 예제는 JVM 시작 파라미터 설정를 참조하십시오.