Cộng đồng Java đang tích cực thảo luận về các phương pháp phân phối ứng dụng khác nhau, đặc biệt tập trung vào jlink và các giải pháp thay thế như native-image của GraalVM. Trong khi jlink cung cấp khả năng tạo runtime module, các nhà phát triển đang bày tỏ nhiều ý kiến khác nhau về tính thực tiễn của nó so với các giải pháp khác.
Cách tiếp cận của jlink
Công cụ jlink của Java cho phép các nhà phát triển tạo ra các runtime image tùy chỉnh bằng cách chọn các module cụ thể cần thiết cho một ứng dụng. Điều này tạo ra dung lượng nhỏ hơn so với việc đóng gói toàn bộ JDK. Tuy nhiên, một số nhà phát triển đã chỉ ra những hạn chế trong định dạng đầu ra của nó. Như một nhà phát triển nhận xét:
Tôi ước họ có thể tạo ra một tệp liên kết tĩnh duy nhất. Golang thực sự tuyệt vời ở khía cạnh này... Hiện tại nó tạo ra thư mục tương tự như JRE, nên với tôi điều này không mấy ý nghĩa, không ai quan tâm đến kích thước thư mục, nhưng tính tiện dụng của tệp đơn mới là điều quan trọng. Nguồn
Các giải pháp thay thế
Cộng đồng đã nêu bật một số giải pháp thay thế để giải quyết hạn chế về phân phối tệp đơn:
- jpackage : Công cụ này có thể sử dụng image đầu ra của jlink làm đầu vào để tạo các định dạng phân phối thuận tiện hơn
- GraalVM : Cung cấp khả năng tạo native image, mặc dù trước đây một số tính năng chỉ có trong phiên bản thương mại
- OpenJ9 : Một giải pháp thay thế khác để tạo ra các bản phân phối nhỏ gọn hơn
Triển khai thực tế
Việc triển khai thực tế jlink đã được sử dụng trong môi trường sản xuất. Ví dụ, một số tổ chức đang tích hợp nó vào quy trình build Docker cho các ứng dụng Java, chứng minh tính khả thi của nó trong triển khai container.
Phát triển gần đây
Một cập nhật quan trọng được ghi nhận trong các cuộc thảo luận là khả năng tạo native image của GraalVM đã trở nên miễn phí, theo xác nhận từ điều khoản cấp phép mới của Oracle. Điều này mở ra thêm nhiều lựa chọn cho các nhà phát triển đang tìm kiếm giải pháp phân phối tệp đơn.
Cân nhắc đa nền tảng
Công cụ jlink duy trì khả năng đa nền tảng của Java, cho phép các nhà phát triển tạo ra runtime image cho các hệ điều hành khác nhau từ một máy build duy nhất. Tính năng này đặc biệt có giá trị đối với các nhóm quản lý triển khai đa nền tảng.
Cuộc thảo luận cho thấy trong khi jlink phục vụ mục đích tạo runtime module, hệ sinh thái Java tiếp tục phát triển với các công cụ như jpackage và GraalVM để đáp ứng các nhu cầu triển khai khác nhau. Việc lựa chọn giữa các công cụ này phụ thuộc nhiều vào yêu cầu cụ thể của dự án và sở thích phân phối.
Nguồn: Bài viết gốc Thảo luận cộng đồng