Java 라이브러리 보호
라이브러리 암호화는 하위 수준의 encode 명령에 대응합니다. 보호된 아카이브만 생성하며, 런타임을 복사하지도 실행 스크립트를 만들지도 않습니다.
1. GUI에서 하는 방법
-
애플리케이션 유형 페이지에서 라이브러리 암호화를 선택합니다. 바로 실행할 수 있는 배포 패키지가 필요하다면 Java 애플리케이션, Spring Boot, Tomcat WAR 중 하나를 선택하세요.

-
입력 JAR, 실제로 로딩될 환경과 맞는 Java 버전, 대상 플랫폼을 선택한 뒤 간단 모드와 고급 모드 중에서 고릅니다. 라이브러리 출력에는
vlxjre가 들어가지 않지만, 이 선택은 아카이브에 묶이는 런타임 신원을 결정합니다. 산출물 수를 줄이려고 서로 다른 플랫폼의 출력을 섞어 쓰지 마세요.
-
간단 모드는 입력 JAR를 검사하고, 라이브러리 암호화가 지원하는 스캐너 ZIP 오버레이와 아카이브 확장자 권장을 적용합니다. 입력 JAR 안의 모든
.class항목은 그대로 암호화되고 나머지 리소스는 손대지 않습니다. -
고급 모드에서는 다음을 설정할 수 있습니다.
- 보호된 메서드에 대해 JIT 비활성화: 보호 대상 메서드를 인터프리터로만 실행합니다.
- 스캐너 ZIP 오버레이 추가: ZIP 중앙 디렉터리를 직접 해석하는 도구에 공개 리소스와 메타데이터 스텁을 제공합니다.
- 호환성 검사 ...: ZIP 접근, 확장자 가정, JNI·네이티브 클래스 사용, 실행 중 바이트코드 읽기 같은 위험 요소를 검사합니다.
-
출력 페이지에서 출력 파일 이름을 전체로 입력합니다. 보통
.p4jx확장자를 쓰고, 연동 대상이.jar를 요구할 때만.jar로 합니다. 고급 페이지의 아카이브 확장자 설정이나 검사 권장에 따라 선택한 파일 이름이.p4jx와.jar사이에서 바뀝니다. Java 버전, 대상 플랫폼, JIT 설정, 스캐너 오버레이를 확인한 뒤 보호 실행을 클릭합니다.단일 플랫폼 작업은 선택한 파일 경로에 그대로 씁니다. 대상 플랫폼을 여러 개 선택하면 GUI가 그 파일이 있는 디렉터리 아래에 플랫폼별 하위 디렉터리를 만들고 각각의 아카이브를 씁니다.
2. 이럴 때 사용합니다
- 자신이 관리하는 다른 P4JX 애플리케이션의 일부가 되는 자사 JAR를 보호할 때
- 기존 실행기에서 P4JX 아카이브를 로딩할 때
- 배포 디렉터리 전체를 직접 관리하는 고급 연동
바로 실행할 수 있는 일반 애플리케이션, Spring Boot 애플리케이션, Tomcat 배포 패키지를 만들려면 그에 맞는 패키징 명령을 사용하세요.
3. 기본 명령
p4j encode library.jar library.p4jx
짧게 쓸 수도 있습니다.
p4j library.jar library.p4jx
encode는 지정한 출력 파일 이름을 그대로 사용하므로 다음 두 명령 모두 P4JX 아카이브를 만듭니다.
p4j encode library.jar library.p4jx
p4j encode library.jar library.jar
4. ZIP 오버레이
p4j encode library.jar library.p4jx \
--zip-overlay scanner
오버레이에는 공개 리소스, 디렉터리, 메타데이터 스텁만 들어갑니다. ZIP 중앙 디렉터리를 직접 읽는 도구가 계속 동작하도록 하기 위한 것이며, 실제 보호 대상 메서드를 드러내지도 P4JX 아카이브를 일반 JAR로 바꾸지도 않습니다.
5. 런타임 요구 사항
하위 수준의 encode는 vlxjre를 만들지 않으므로, 인코딩 시점의 신원과 맞는 VLX 런타임을 직접 준비해야 합니다. 다음은 하지 마세요.
- 일반 OpenJDK나 Oracle JDK로 아카이브를 로딩하기
- 다른 버전의 출력 패키지에서
lib/modules나 네이티브 라이브러리를 복사하기 - 다른 대상 플랫폼, 다른 JDK 트레인, 다른 인코딩 작업의 런타임과 아카이브를 함께 쓰기
일반적인 배포 프로젝트에서는 이런 대응 관계를 자동으로 유지해 주는 상위 패키징 명령을 사용하는 편이 안전합니다.
6. 라이선스
아카이브를 만들려면 서버가 발급한 라이선스를 받아 결과물에 포함해야 합니다. 정식 계정과 평가 모드는 같은 아카이브 검증 절차를 거칩니다. 자동화 환경에서는 내보낸 작업 스크립트에 비밀번호를 하드코딩하지 마세요.