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 は指定した出力ファイル名をそのまま使うため、次の 2 つはどちらも 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. ライセンス
アーカイブの生成には、サーバーが発行するライセンスの取得と埋め込みが必要です。正式アカウントと試用モードは、同じアーカイブ検証の流れを通ります。自動化された環境では、エクスポートしたタスクスクリプトにパスワードをハードコードしないでください。