---
title: "Hướng dẫn cài đặt và quản lý nhiều phiên bản Java trên Ubuntu"
description: "Java và JVM (máy ảo Java) cần thiết cho nhiều loại phần mềm, bao gồm Tomcat, Jetty, Glassfish, Cassandra và Jenkins."
url: https://cloudfly.vn/huong-dan-cai-dat-va-quan-ly-nhieu-phien-ban-java-tren-ubuntu
image: https://media.cloudfly.vn/posts/cai-dat-va-quan-li-nhieu-phien-ban-java-trn-ubuntu.png
---

# Hướng dẫn cài đặt và quản lý nhiều phiên bản Java trên Ubuntu

![description image](https://media.cloudfly.vn/posts/cai-dat-va-quan-li-nhieu-phien-ban-java-trn-ubuntu.png)
## Giới thiệu
Java và JVM (máy ảo Java) là bắt buộc cho nhiều loại phần mềm, bao gồm [Tomcat](http://tomcat.apache.org/), [Jetty](https://www.eclipse.org/jetty/), [Glassfish](https://javaee.github.io/glassfish/), [Cassandra](http://cassandra.apache.org/) và [Jenkins](https://jenkins.io/).

Trong hướng dẫn này, bạn sẽ cài đặt các phiên bản khác nhau của Java Runtime Environment (JRE) và Java Developer Kit (JDK) sử dụng `apt`. Bạn sẽ cài OpenJDK cũng như JDK chính thức từ Oracle. Sau đó bạn sẽ chọn phiên bản muốn sử dụng cho dự án của mình. Khi hoàn thành, bạn có thể sử dụng JDK để phát triển phần mềm hoặc sử dụng Java Runtime để chạy phần mềm.

<details open>
<summary>
## Yêu cầu trước
</summary>
Bạn sẽ cần:

- Một máy chủ Ubuntu được thiết lập theo hướng dẫn [thiết lập máy chủ ban đầu trên Ubuntu 22.04], bao gồm người dùng không phải root với quyền sudo và firewall.
</details>

<details open>
<summary>
## Bước 1 — Cài đặt Java
</summary>
Một bản cài đặt Java gồm hai thành phần chính. JDK cung cấp các công cụ phần mềm thiết yếu để phát triển Java như trình biên dịch và trình gỡ lỗi. JRE dùng để thực thi các chương trình Java. Ngoài ra, có hai lựa chọn chính để cài Java. OpenJDK là bản triển khai mã nguồn mở của Java và được đóng gói cùng Ubuntu. Oracle JDK là phiên bản gốc của Java và được Oracle duy trì đầy đủ.

Cả hai phiên bản đều được Oracle công nhận chính thức. Cả hai đều do Oracle phát triển nhưng OpenJDK có bổ sung đóng góp cộng đồng do tính chất mã nguồn mở. Tuy nhiên, từ Java 11, hai lựa chọn về chức năng là như nhau [như Oracle mô tả](https://blogs.oracle.com/java/post/oracle-jdk-releases-for-java-11-and-later). Lựa chọn cài đặt phụ thuộc vào việc chọn giấy phép phù hợp với nhu cầu cá nhân. Ngoài ra, OpenJDK có thể cài JRE riêng biệt, trong khi Oracle JDK kèm sẵn JRE.

### Tùy chọn 1 — Cài đặt JRE/JDK mặc định
Một lựa chọn cài Java là sử dụng phiên bản kèm theo Ubuntu. Mặc định, Ubuntu bao gồm OpenJDK 11, là biến thể mã nguồn mở của JRE và JDK.

Để cài OpenJDK Java, trước tiên cập nhật chỉ mục gói `apt` của bạn:

```bash
sudo apt update
```

Kiểm tra xem Java đã được cài chưa:

```bash
java -version
```

Nếu Java chưa được cài, bạn sẽ nhận được thông báo như sau:

```
Command 'java' not found, but can be installed with:

sudo apt install default-jre              # version 2:1.11-72build1, or
sudo apt install openjdk-11-jre-headless  # version 11.0.14+9-0ubuntu2
sudo apt install openjdk-17-jre-headless  # version 17.0.2+8-1
sudo apt install openjdk-18-jre-headless  # version 18~36ea-1
sudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1
```

Chạy lệnh sau để cài JRE từ OpenJDK 11:

```bash
sudo apt install default-jre
```

JRE sẽ cho phép bạn chạy gần như tất cả phần mềm Java.

Kiểm tra cài đặt bằng:

```bash
java -version
```

Bạn sẽ nhận đầu ra tương tự:

```
openjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2)
OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2, mixed mode, sharing)
```

Bạn có thể cần JDK ngoài JRE để biên dịch và chạy một số phần mềm Java cụ thể. Để cài JDK, chạy lệnh sau (cũng cài kèm JRE):

```bash
sudo apt install default-jdk
```

Kiểm tra JDK đã cài bằng cách xem phiên bản `javac` (trình biên dịch Java):

```bash
javac -version
```

Bạn sẽ thấy đầu ra:

```
javac 11.0.14
```

Sau đây, bạn sẽ học cách cài JDK và JRE chính thức của Oracle.

### Tùy chọn 2 — Cài Oracle JDK 11
Giấy phép Oracle cho Java không cho phép tự động cài qua trình quản lý gói. Để cài Oracle JDK, bạn cần [tạo tài khoản Oracle]và tải thủ công JDK để thêm kho phần mềm mới cho phiên bản muốn dùng. Sau đó dùng `apt` với sự hỗ trợ từ [kịch bản cài đặt bên thứ ba](https://launchpad.net/~linuxuprising/+archive/ubuntu/java/+packages) để cài. Oracle JDK bao gồm sẵn JRE nên không cần cài riêng.

Phiên bản Oracle JDK cần tải phải trùng với phiên bản kịch bản cài đặt. Để biết phiên bản cần, xem trang [oracle-java11-installer](https://launchpad.net/~linuxuprising/+archive/ubuntu/java/+packages).

Tìm gói cho **Jammy**, như hình dưới:

![description image](https://media.cloudfly.vn/posts/cai-dat-va-quan-li-nhieu-phien-ban-java-trn-ubuntu-1.png)

Trong hình, phiên bản là `11.0.13`. Bạn cần Oracle JDK 11.0.13. Phiên bản của bạn có thể khác tùy thời điểm cài.

Bạn không cần tải từ trang này; sẽ cài kịch bản qua `apt` sau.

Tiếp theo, vào trang [Tải kho lưu trữ](https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html) và tìm phiên bản tương ứng.

![Trang tải kho Java của Oracle]![description image]![description image](https://media.cloudfly.vn/posts/cai-dat-va-quan-li-nhieu-phien-ban-java-trn-ubuntu-2.png)

Chọn gói nén Linux x64 `.tar.gz`:

![description image]![description image](https://media.cloudfly.vn/posts/cai-dat-va-quan-li-nhieu-phien-ban-java-trn-ubuntu-3.png)

Màn hình sẽ yêu cầu chấp nhận thỏa thuận giấy phép Oracle. Chọn hộp chấp nhận và nhấn **Download**. Có thể bạn phải đăng nhập lại tài khoản Oracle lần nữa.

Sau khi tải xong, chuyển file lên máy chủ. Trên máy cục bộ dùng macOS, Linux hoặc Windows có [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10), dùng lệnh `scp` để chuyển file tới thư mục home của user `sammy` trên server. Lệnh sau giả định bạn lưu file JDK trong thư mục `Downloads` cục bộ:

```bash
scp Downloads/jdk-11.0.13_linux-x64_bin.tar.gz sammy@your_server_ip:~
```

Sau khi upload xong, về server thêm kho phần mềm bên thứ ba giúp cài Oracle Java.

Trước tiên, nhập khoá ký để xác minh phần mềm:

```bash
sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/oracle-jdk11-installer.gpg --keyserver keyserver.ubuntu.com --recv-keys EA8CACC073C3DB2A
```

Bạn sẽ thấy đầu ra:

```
gpg: keybox '/usr/share/keyrings/oracle-jdk11-installer.gpg' created
gpg: /tmp/trustdb.gpg: trustdb created
gpg: key EA8CACC073C3DB2A: public key "Launchpad PPA for Linux Uprising" imported
gpg: Total number processed: 1
gpg:               imported: 1
```

Thêm kho phần mềm vào danh sách nguồn:

```bash
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-jdk11-installer.gpg] https://ppa.launchpadcontent.net/linuxuprising/java/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/oracle-jdk11-installer.list > /dev/null
```

Cập nhật danh sách gói:

```bash
sudo apt update
```

Trình cài đặt sẽ tìm Oracle JDK bạn đã tải trong `/var/cache/oracle-jdk11-installer-local`. Tạo thư mục và di chuyển file vào đó:

```bash
sudo mkdir -p /var/cache/oracle-jdk11-installer-local/
sudo cp jdk-11.0.13_linux-x64_bin.tar.gz /var/cache/oracle-jdk11-installer-local/
```

Cuối cùng, cài gói:

```bash
sudo apt install oracle-java11-installer-local
```

Trình cài sẽ yêu cầu bạn chấp nhận giấy phép Oracle, sau đó giải nén và cài Java.

Bây giờ bạn sẽ học cách chọn phiên bản Java muốn dùng.
</details>

<details open>
<summary>
## Bước 2 — Quản lý Java
</summary>
Bạn có thể cài nhiều phiên bản Java trên một máy chủ. Bạn có thể cấu hình phiên bản mặc định sử dụng trên dòng lệnh bằng lệnh `update-alternatives`.

```bash
sudo update-alternatives --config java
```

Kết quả sẽ trông như sau nếu bạn cài cả hai phiên bản trong hướng dẫn:

```
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                         Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      manual mode
* 2            /usr/lib/jvm/java-11-oracle/bin/java          1091      manual mode

Press <enter> to keep the current choice[*], or type selection number:
```

Chọn số tương ứng phiên bản Java để dùng làm mặc định, hoặc nhấn `ENTER` để giữ nguyên.

Bạn có thể làm tương tự với các lệnh Java khác như trình biên dịch (`javac`):

```bash
sudo update-alternatives --config javac
```

Các lệnh khác có thể dùng lệnh này gồm `keytool`, `javadoc`, và `jarsigner`.
</details>

<details open>
<summary>
## Bước 3 — Thiết lập biến môi trường `JAVA_HOME`
</summary>
Nhiều chương trình viết bằng Java sử dụng biến môi trường `JAVA_HOME` để xác định vị trí cài Java.

Để đặt biến môi trường này, trước tiên xác định nơi Java được cài bằng lệnh:

```bash
sudo update-alternatives --config java
```

Lệnh này liệt kê mỗi bản cài Java cùng đường dẫn:

```
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                         Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      manual mode
* 2            /usr/lib/jvm/java-11-oracle/bin/java          1091      manual mode

Press <enter> to keep the current choice[*], or type selection number:
```

Đường dẫn cài đặt ví dụ:

1. OpenJDK 11: `/usr/lib/jvm/java-11-openjdk-amd64/bin/java`
2. Oracle Java: `/usr/lib/jvm/java-11-oracle/jre/bin/java`

Sao chép đường dẫn bản cài bạn chọn. Mở file `/etc/environment` bằng `nano` hoặc trình soạn thảo khác:

```bash
sudo nano /etc/environment
```

Thêm dòng sau cuối file, thay phần được tô sáng bằng đường dẫn của bạn, lưu ý không bao gồm phần `bin/`:

```
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
```

Sửa file này sẽ đặt biến `JAVA_HOME` cho tất cả người dùng trên hệ thống.

Lưu và thoát trình soạn thảo.

Tải lại file để áp dụng cho phiên làm việc hiện tại:

```bash
source /etc/environment
```

Kiểm tra biến môi trường đã được đặt:

```bash
echo $JAVA_HOME
```

Bạn sẽ thấy đường dẫn vừa đặt:

```
/usr/lib/jvm/java-11-openjdk-amd64
```

Người dùng khác cần chạy `source /etc/environment` hoặc đăng xuất rồi đăng nhập lại để áp dụng.
</details>

<details open>
<summary>
## Các lỗi phổ biến và gỡ lỗi
</summary>
### "Java không tìm thấy" hoặc "lệnh không tìm thấy"
Nếu gặp lỗi `Java not found` hoặc `command not found`, hệ thống không xác định được thực thi Java. Khắc phục bằng cách đặt biến môi trường PATH chứa thư mục cài Java:

```bash
export PATH=$PATH:/usr/lib/jvm/java-11-openjdk-amd64/bin
```

### "JAVA_HOME chưa được đặt"
Nếu nhận lỗi `JAVA_HOME is not set`, nghĩa là biến môi trường chưa cấu hình. Khắc phục bằng cách đặt biến:

```bash
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
```

### "Không thể tìm phiên bản JDK hoặc JRE đã cài"
Lỗi này nghĩa hệ thống không tìm được Java Development Kit (JDK) hoặc Java Runtime Environment (JRE) đã cài. Kiểm tra đường dẫn cài đặt và đặt biến PATH đúng:

```bash
export PATH=$PATH:/usr/lib/jvm/java-11-openjdk-amd64/bin
```

### "Không có quyền trong quá trình cài"
Nếu gặp lỗi `Permission denied` khi cài Java, có thể do tài khoản không có quyền. Chạy lại lệnh cài với `sudo`:

```bash
sudo apt-get install openjdk-11-jdk
```
</details>

<details open>
<summary>
## Câu hỏi thường gặp (FAQs)
</summary>
### Làm thế nào kiểm tra xem Java đã cài trên Ubuntu?
Chạy lệnh:

```bash
java -version
```

Nếu Java đã cài, hiện phiên bản Java đang dùng. Nếu chưa, hiện lỗi.

### Sự khác nhau giữa JRE và JDK là gì?
[JRE](https://www.java.com/en/download/manual.jsp) cung cấp môi trường chạy Java, trong khi [JDK](https://jdk.java.net/) gồm JRE cùng các công cụ phát triển như trình biên dịch và gỡ lỗi.

| Tính năng         | JRE | JDK |
|-------------------|:---:|:---:|
| Môi trường chạy   | Có  | Có  |
| Công cụ phát triển| Không | Có  |
| Trình biên dịch   | Không | Có  |
| Trình gỡ lỗi      | Không | Có  |

### Làm cách nào cài phiên bản Java cụ thể trên Ubuntu?
Chạy lệnh:

```bash
sudo apt-get install openjdk-11-jdk
```

### Làm sao chuyển đổi giữa các phiên bản Java?
Dùng lệnh:

```bash
sudo update-alternatives --config java
```

### Làm sao gỡ Java khỏi Ubuntu?
Chạy:

```bash
sudo apt-get remove openjdk-11-jdk
```

### JAVA_HOME là gì và cách đặt như thế nào?
`JAVA_HOME` là biến môi trường chỉ tới thư mục cài đặt Java trên hệ thống. Đặt bằng lệnh:

```bash
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
```


## Kết luận

Trong hướng dẫn này, bạn đã cài và quản lý thành công nhiều phiên bản Java trên hệ thống Ubuntu. Việc này mở ra nhiều khả năng cài phần mềm dựa trên Java như [Tomcat](https://tomcat.apache.org/), [Jetty](https://www.eclipse.org/jetty/), [Glassfish](https://javaee.github.io/glassfish/), [Cassandra](http://cassandra.apache.org/), hoặc [Jenkins](https://jenkins.io/).
