Làm Thế Nào để Dùng Nhiều Phiên Bản JDK Trên Một Máy Tính Mà ...

Để lập trình Java chúng ta cần cài đặt JDK (Java Development Kit). Chúng ta có nhiều dự án Java dùng nhiều phiên bản JDK khác nhau hoặc muốn trải nghiệm tính năng mới nhất của JDK 17 nhưng khi cần vẫn có JDK 11 để lập trình dự án. Làm thế nào đây?

Tôi kiếm sống bằng viết code. Viết càng chăm thì càng kiếm được nhiều (thực ra không nhanh bằng đầu tư coin) nhưng cơ bản là sống ổn và không lo giá coin lên xuống bất thường. Đợt này tính mua cái xe 4 bánh cuối tuần chạy đi xa cắm trại, nên lại phải nhận thêm một dự án nữa. Khách hàng yêu cầu phải dùng Graalvm + Quarkus để đóng gói native app vào Docker image nhỏ gọn. Rắc rối phát sinh từ đây: dự án chính thì dùng JDK 16, dự án làm thêm thì dùng Graalvm dựa trên JDK 11. Chuyển sang Graalvm, thì không biên dịch được dự án dùng JDK 16 nữa. :(

Loay hoay Google tìm ra một công cụ quản lý các phiên bản JDK cho ngôn ngữ Java, Groovy, Scala, Kotlin rất mạnh và tiện, đó là SDKMan

SDKMan làm gì?

SDKMan là một công cụ giống với HomeBrew nhưng dành riêng cho lập trình viên Java, Groovy, Scala, Kotlin. SDKMan cài đặt nhiều phiên bản khác nhau trên máy tính, và chuyển đổi giữa các phiên bản một cách đơn giản, không yêu cầu lập trình viên phải can thiệp cấu hình lại thông số hệ thống như $JAVA_HOME. SDKMan giúp nhiều phiên bản khác nhau cùng chung sống hoà bình, dễ dàng thêm mới và loại bỏ. SDKMan có thể cài trên Windows, Mac, Linux... Trang web chính thức của SDKMan đây https://sdkman.io/

Một số lệnh SDKMan căn bản

sdk help hiển thị hỗ trợ cách sử dụng SDKMan

1. Liệt kê tất cả các gói

sdk list

2. Liệt kê các phiên bản của một gói

sdk list xxx liệt kê các phiên bản hỗ trợ một ngôn ngữ lập trình cụ thể hay một framework.

Ví dụ: liệt kê các phiên bản JDK cho Java sdk list java ================================================================================ Available Java Versions ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- AdoptOpenJDK | | 16.0.0.j9 | adpt | | 16.0.0.j9-adpt | | 16.0.0.hs | adpt | | 16.0.0.hs-adpt | | 11.0.10.j9 | adpt | | 11.0.10.j9-adpt | | 11.0.10.hs | adpt | | 11.0.10.hs-adpt | | 8.0.282.j9 | adpt | | 8.0.282.j9-adpt | | 8.0.282.hs | adpt | | 8.0.282.hs-adpt Amazon | | 16.0.0.36.1 | amzn | | 16.0.0.36.1-amzn | | 15.0.2.7.1 | amzn | | 15.0.2.7.1-amzn | | 11.0.10.9.1 | amzn | | 11.0.10.9.1-amzn | | 8.282.08.1 | amzn | | 8.282.08.1-amzn Azul Zulu | | 16.0.0 | zulu | | 16.0.0-zulu | | 16.0.0.fx | zulu | | 16.0.0.fx-zulu | | 15.0.2.fx | zulu | | 15.0.2.fx-zulu | | 11.0.10 | zulu | | 11.0.10-zulu | | 11.0.10.fx | zulu | | 11.0.10.fx-zulu | | 8.0.282 | zulu | | 8.0.282-zulu | | 8.0.282.fx | zulu | | 8.0.282.fx-zulu | | 7.0.292 | zulu | | 7.0.292-zulu BellSoft | | 16.0.0.fx | librca | | 16.0.0.fx-librca | | 16.0.0 | librca | | 16.0.0-librca | | 11.0.10.fx | librca | | 11.0.10.fx-librca | | 11.0.10 | librca | | 11.0.10-librca | | 8.0.282.fx | librca | | 8.0.282.fx-librca | | 8.0.282 | librca | | 8.0.282-librca GraalVM | | 21.0.0.2.r11 | grl | installed | 21.0.0.2.r11-grl | | 21.0.0.2.r8 | grl | | 21.0.0.2.r8-grl | | 20.3.1.2.r11 | grl | | 20.3.1.2.r11-grl | | 20.3.1.2.r8 | grl | | 20.3.1.2.r8-grl | | 19.3.5.r11 | grl | | 19.3.5.r11-grl | | 19.3.5.r8 | grl | | 19.3.5.r8-grl Java.net | | 17.ea.18 | open | | 17.ea.18-open | | 17.ea.6.lm | open | | 17.ea.6.lm-open | | 17.ea.2.pma | open | | 17.ea.2.pma-open | >>> | 16 | open | installed | 16-open | | 11.0.2 | open | | 11.0.2-open Microsoft | | 11.0.10.9 | ms | | 11.0.10.9-ms SAP | | 16 | sapmchn | | 16-sapmchn | | 15.0.2 | sapmchn | | 15.0.2-sapmchn | | 11.0.10 | sapmchn | | 11.0.10-sapmchn TravaOpenJDK | | 11.0.9 | trava | | 11.0.9-trava | | 8.0.232 | trava | | 8.0.232-trava ================================================================================ Use the Identifier for installation: $ sdk install java 11.0.3.hs-adpt ================================================================================

Liệt kê các phiên bản Groovy sdk list groovy ================================================================================ Available Groovy Versions ================================================================================ 4.0.0-alpha-3 2.4.19 2.2.2 1.7.11 4.0.0-alpha-2 2.4.18 2.2.1 1.7.10 4.0.0-alpha-1 2.4.17 2.2.0 1.7.9 3.0.7 2.4.16 2.1.9 1.7.8 3.0.6 2.4.15 2.1.8 1.7.7 3.0.5 2.4.14 2.1.7 1.7.6 3.0.4 2.4.13 2.1.6 1.7.5 3.0.3 2.4.12 2.1.5 1.7.4 3.0.2 2.4.11 2.1.4 1.7.3 3.0.1 2.4.10 2.1.3 1.7.2 3.0.0 2.4.9 2.1.2 1.7.1 2.6.0-alpha-4 2.4.8 2.1.1 1.7.0 2.6.0-alpha-3 2.4.7 2.1.0 1.6.9 2.6.0-alpha-2 2.4.6 2.0.8 1.6.8 2.6.0-alpha-1 2.4.5 2.0.7 1.6.7 2.5.14 2.4.4 2.0.6 1.6.6 2.5.13 2.4.3 2.0.5 1.6.5 2.5.12 2.4.2 2.0.4 1.6.4 2.5.11 2.4.1 2.0.3 1.6.3 2.5.10 2.4.0 2.0.2 1.6.2 2.5.9 2.3.11 2.0.1 1.6.1 2.5.8 2.3.10 2.0.0 1.6.0 2.5.7 2.3.9 1.8.9 1.5.8 2.5.6 2.3.8 1.8.8 1.5.7 2.5.5 2.3.7 1.8.7 1.5.6 2.5.4 2.3.6 1.8.6 1.5.5 2.5.3 2.3.5 1.8.5 1.5.4 2.5.2 2.3.4 1.8.4 1.5.3 2.5.1 2.3.3 1.8.3 1.5.2 2.5.0 2.3.2 1.8.2 1.5.1 2.4.21 2.3.1 1.8.1 1.5.0 2.4.20 2.3.0 1.8.0 ================================================================================ + - local version * - installed > - currently in use ================================================================================

Liệt kê các phiên bản công cụ quản lý Maven package sdk list maven ================================================================================ Available Maven Versions ================================================================================ 3.8.1 3.6.3 3.6.2 3.6.1 3.6.0 3.5.4 3.5.3 3.5.2 3.5.0 3.3.9

3. Cài đặt một phiên bản cụ thể

Ví dụ cài đặt JDK, phiên bản 16 từ Java.net sdk install java 16-open

Ví dụ cài đặt Maven phiên bản 3.8.1 sdk install maven 3.8.1 Downloading: maven 3.8.1 In progress... ######################################################################## 100.0% Installing: maven 3.8.1 Done installing! Setting maven 3.8.1 as default.

4. Chuyển đổi giữa các phiên bản đã cài đặt bằng sdk use

Giả sử trên máy, tôi dùng SDKMan cài đặt 2 phiên bản JDK:

  • OpenJDK 16
  • Graalvm 11

Tôi dùng lệnh sdk list java để liệt kê các phiên bản JDK đã cài. Giờ tôi muốn chuyển qua lại giữa 2 phiên bản này. Tôi sẽ làm như sau

sdk use java 16-open để chuyển sang Open JDK 16

sdk use java 21.0.0.2.r11-grl để chuyển sang Graalvm base trên JDK 11

Chú ý sau từ khoá use phải có tham java và identifier chi tiết của phiên bản JDK.

5. SDK Man đã lưu các phiên bản JDK, thư viên Java ở đâu?

Tôi sử dụng MacOS, thì thấy rằng SDK Man lưu ở thư mục ~/.sdkman/candidates. Nếu gõ lệnh tree -L 2 ta sẽ thấy các gói phần mềm được cài trong ~/.sdkman/candidates ├── java │   ├── 16-open │   ├── 21.0.0.2.r11-grl │   └── current -> 16-open ├── maven │   ├── 3.8.1 │   └── current -> 3.8.1 └── visualvm ├── 2.0.6 └── current -> 2.0.6

Nhờ SDKMan (sdk list) mình phát hiện ra một công cụ cho lập trình Java rất hay

VisualVM chuyên quan sát bộ nhớ, thread, tài nguyên một ứng dụng Java đang chạy

https://visualvm.github.io/

Từ khóa » Cách Cài Jdk 16