Bảo vệ ứng dụng Java thông thường

javaapp xử lý các ứng dụng Java thông thường có lớp chính. Nó tạo ra kho lưu trữ đã bảo vệ, VLX JRE cho từng nền tảng mục tiêu và các tập lệnh khởi chạy.

1. Thao tác trên giao diện đồ họa

  1. Ở trang loại ứng dụng, chọn Ứng dụng Java.

    Chọn Ứng dụng Java

  2. Chọn tệp JAR đầu vào, phiên bản Java đi kèm và các nền tảng mục tiêu, rồi chọn chế độ đơn giản hoặc nâng cao.

    Chọn đầu vào, phiên bản Java, nền tảng mục tiêu và chế độ

  3. Ở chế độ nâng cao, điền Lớp chính nếu cần, rồi thiết lập tùy chọn khởi chạy JVM, cấu hình JavaFX và quy tắc loại trừ. Chế độ đơn giản bỏ qua trang này. Ý nghĩa từng tùy chọn xem tại Thiết lập chế độ nâng cao của Protector4J.

    Thiết lập tùy chọn nâng cao cho ứng dụng Java thông thường

  4. Chọn thư mục xuất, xem lại phần tóm tắt rồi bấm Chạy bảo vệ.

    Chọn thư mục xuất và chạy bảo vệ

2. Ví dụ dòng lệnh

Khi tệp kê khai đã khai báo đúng Main-Class:

p4j javaapp app.jar dist

Nếu tệp kê khai không có Main-Class, hoặc bạn muốn khởi chạy từ lớp khác, hãy chỉ định bằng --main:

p4j javaapp app.jar dist --main com.example.Main

Đặt cùng lúc lớp chính và tùy chọn JVM:

p4j javaapp app.jar dist \
  --main com.example.Main \
  --jvm-option -Xms512m \
  --jvm-option -Xmx2g

Chỉ bảo vệ một phần ứng dụng:

p4j javaapp app.jar dist \
  --protect 'com.example.core.**' \
  --exclude 'com.example.core.dto.**'

Quét tương thích và tự động áp dụng khuyến nghị:

p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply

Hai tùy chọn này không dùng chung được. Khác biệt như sau:

Tùy chọnTác dụngKhi nào dùng
--compat-scanChỉ quét tệp JAR đầu vào, in ra rủi ro và khuyến nghị cấu hình rồi kết thúc. Không mã hóa và không tạo dist, nên không cần thư mục xuất.Hãy xem báo cáo trước ở lần bảo vệ đầu tiên, sau khi nâng cấp phụ thuộc hoặc đổi phạm vi bảo vệ, và khi truy tìm sự cố tương thích.
--compat-applyQuét xong thì gộp các khuyến nghị an toàn, tiếp tục mã hóa và ghi kết quả, nên bắt buộc phải có thư mục xuất.Dùng để hoàn tất đóng gói khi bạn đã đọc kết quả quét và chấp nhận khuyến nghị. Cũng hợp với các lần dựng lặp lại và quy trình CI đã kiểm chứng quy tắc.

Với javaapp, --compat-apply có thể thêm quy tắc loại trừ dựa trên kết quả quét, đồng thời điều chỉnh lớp phủ ZIP, JavaFX và hậu tố kho lưu trữ. Với ba mục sau, giá trị bạn chỉ định rõ trên dòng lệnh được ưu tiên. Các lớp loại trừ được khuyến nghị sẽ gộp sẵn với mẫu --exclude bạn tự viết; nếu không muốn thêm tự động, hãy truyền kèm --no-compat-excludes. Trình quét chỉ phân tích tĩnh theo phỏng đoán, nên những vấn đề buộc phải sửa mã sẽ không được --compat-apply khắc phục, và ứng dụng sau khi đóng gói vẫn cần kiểm thử hồi quy trên nền tảng mục tiêu.

Các lệnh khác, toàn bộ tùy chọn, biến môi trường và ví dụ tự động hóa nằm trong Tham chiếu dòng lệnh.

3. Cấu trúc đầu ra

dist/
├── app.p4jx              # thành app.jar khi dùng --archive-suffix jar
├── vlxjre/               # môi trường chạy khớp với kho lưu trữ và nền tảng
├── lib/                  # phụ thuộc theo Class-Path trong tệp kê khai, không bắt buộc
├── run.sh
├── run.command
├── run.bat
└── README.md

Các tài nguyên không phải lớp được giữ trong khung nhìn tài nguyên công khai của kho lưu trữ P4JX. Lớp được bảo vệ chỉ để lộ phần khung siêu dữ liệu cho trình quét; phần thân thật của phương thức chỉ môi trường chạy VLX mới nạp được.

4. Khởi chạy

./run.sh [tham số của ứng dụng...]

Trên Windows:

run.bat [tham số của ứng dụng...]

Đừng thay thư mục vlxjre trong đầu ra bằng JRE của hệ thống. Nếu buộc phải khởi chạy thủ công, hãy lấy tập lệnh đã tạo làm mẫu và giữ nguyên classpath, tùy chọn VM cùng tùy chọn mô-đun JavaFX của nó.

Khi đóng gói cho Windows, bạn còn có thể tạo thêm một trình khởi chạy gốc chạy được bằng cách bấm đúp. Nó tồn tại song song với các tập lệnh khởi chạy — xem Tạo trình khởi chạy EXE Windows.

Tùy chọn khởi chạy JVM

Khi đóng gói, hãy nhập mỗi dòng một tùy chọn ở mục Tùy chọn khởi chạy JVM trên giao diện, hoặc lặp lại tham số trên dòng lệnh:

--jvm-option -Xms512m --jvm-option -Xmx2g

Để đổi lâu dài trong một thư mục đã triển khai:

  • macOS và Linux: sửa run.sh, thêm JVM_OPTS+=("-Xms512m" "-Xmx2g") trước đoạn kiểm tra APP_JAVA_OPTS. Tệp run.command gọi chính run.sh đó.
  • Windows: sửa run.bat, thêm set "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g" trước đoạn kiểm tra APP_JAVA_OPTS.

Tùy chọn nhất thời có thể đưa vào qua APP_JAVA_OPTS. Ví dụ đầy đủ và lưu ý xem tại Tùy chọn khởi chạy JVM. Mọi sửa đổi thủ công trong tập lệnh sẽ bị ghi đè khi đóng gói lại.

5. Phạm vi bảo vệ được khuyến nghị

Mặc định các lớp của chính ứng dụng được bảo vệ. Với dự án chạy thật, tốt hơn là chỉ rõ các gói nghiệp vụ của bạn:

--protect 'com.mycompany.product.**'

Những lớp thường nên loại trừ:

  • DTO và record được Jackson tuần tự hóa hoặc giải tuần tự hóa trực tiếp;
  • lớp có trường hoặc phương thức bị JNI truy cập;
  • lớp mà ORM, bộ chèn phụ thuộc hoặc framework proxy cần ghi đè;
  • thư viện bên thứ ba và framework nguồn mở;
  • lớp mà ClassLoader tự viết phải định nghĩa lại từ mảng byte.

6. Hậu tố .p4jx.jar

p4j javaapp app.jar dist --archive-suffix jar

Tùy chọn này chỉ đổi tên tệp; nội dung kho lưu trữ vẫn là P4JX. Chỉ dùng khi một thành phần bên thứ ba ghi cứng .jar trong URL hoặc tên tệp. Nó không biến kho lưu trữ thành ZIP hay JAR thông thường.