TL; DR
Dành cho độc giả có kinh nghiệm:
- Tìm đường dẫn Java; nó trông như thế này:
C:\Program Files\Java\jdkxxxx\bin\
- Menu bắt đầu tìm kiếm "biến môi trường" để mở hộp thoại tùy chọn.
- Xem xét
PATH
. Xóa các đường dẫn Java cũ.
- Thêm đường dẫn Java mới vào
PATH
.
- Biên tập
JAVA_HOME
.
- Đóng và mở lại bàn điều khiển / IDE.
Chào mừng bạn
Bạn đã gặp phải một trong những vấn đề kỹ thuật khét tiếng nhất mà người mới bắt đầu Java phải đối mặt: 'xyz' is not recognized as an internal or external command...
báo lỗi.
Tóm lại, bạn chưa cài đặt Java chính xác . Hoàn tất cài đặt Java trên Windows yêu cầu một số bước thủ công. Bạn phải luôn thực hiện các bước này sau khi cài đặt Java, kể cả sau khi nâng cấp JDK.
Biến môi trường và PATH
(Nếu bạn đã hiểu điều này, vui lòng bỏ qua ba phần tiếp theo.)
Khi bạn chạy javac HelloWorld.java
, cmd phải xác định javac.exe
vị trí của nó. Điều này được thực hiện với PATH
, một biến môi trường.
Một biến môi trường là một cặp khóa-giá trị đặc biệt (ví dụ windir=C:\WINDOWS
). Hầu hết đi kèm với hệ điều hành, và một số được yêu cầu cho hoạt động đúng hệ thống. Một danh sách của chúng được truyền cho mọi chương trình (bao gồm cmd) khi nó bắt đầu. Trên Windows , có hai loại : biến môi trường người dùng và biến môi trường hệ thống .
Bạn có thể thấy các biến môi trường của bạn như thế này:
C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\craig\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
...
Biến quan trọng nhất là PATH
. Nó là một danh sách các đường dẫn, cách nhau bởi;
. Khi một lệnh được nhập vào cmd, mỗi thư mục trong danh sách sẽ được quét để thực thi phù hợp.
Trên máy tính của tôi, PATH
là:
C:\>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower
Shell\v1.0\;C:\ProgramData\Microsoft\Windows\Start Menu\Programs;C:\Users\craig\AppData\
Roaming\Microsoft\Windows\Start Menu\Programs;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\
msys64\mingw32\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\
craig\AppData\Local\Yarn\bin;C:\Program Files\Java\jdk-10.0.2\bin;C:\ProgramFiles\Git\cmd;
C:\Program Files\Oracle\VirtualBox;C:\Program Files\7-Zip\;C:\Program Files\PuTTY\;C:\
Program Files\launch4j;C:\Program Files (x86)\NSIS\Bin;C:\Program Files (x86)\Common Files
\Adobe\AGL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\iCLS Client\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\iCLS
Client\;C:\Users\craig\AppData\Local\Microsoft\WindowsApps
Khi bạn chạy javac HelloWorld.java
, cmd, khi nhận ra đó javac
không phải là lệnh nội bộ , sẽ tìm kiếm hệ thống PATH
theo sau bởi người dùngPATH
. Nó một cách máy móc vào mỗi thư mục trong danh sách, và kiểm tra nếu javac.com
, javac.exe
, javac.bat
vv có mặt. Khi nó tìm thấy javac
, nó chạy nó. Khi nó không, nó in'javac' is not recognized as an internal or external command, operable program or batch file.
Bạn phải thêm thư mục thực thi Java vào PATH
.
JDK so với JRE
(Nếu bạn đã hiểu điều này, vui lòng bỏ qua phần này.)
Khi tải xuống Java, bạn được cung cấp một lựa chọn giữa:
- Các Java Runtime Environment (JRE), trong đó bao gồm các công cụ cần thiết để chạy các chương trình Java, nhưng không để biên dịch mới - nó chứa
java
nhưng khôngjavac
.
- Các Java Development Kit (JDK), trong đó có cả hai
java
và javac
, cùng với một loạt các công cụ phát triển khác. JDK là một superset của JRE.
Bạn phải chắc chắn rằng bạn đã cài đặt JDK . Nếu bạn chỉ cài đặt JRE, bạn không thể thực thi javac
vì bạn không cài đặt trình biên dịch Java trên ổ cứng. Kiểm tra danh sách các chương trình Windows của bạn và đảm bảo tên của gói Java có chứa từ "Bộ công cụ phát triển" trong đó.
Đừng dùng set
(Nếu bạn không có kế hoạch nào, hãy bỏ qua phần này.)
Một số câu trả lời khác khuyên bạn nên thực hiện một số biến thể của:
C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin
Đừng làm thế. Có một số vấn đề lớn với lệnh đó:
- Lệnh này xóa mọi thứ khác khỏi
PATH
và thay thế nó bằng đường dẫn Java. Sau khi thực hiện lệnh này, bạn có thể thấy các lệnh khác không hoạt động.
- Đường dẫn Java của bạn có thể là không
C:\Program Files\Java\jdk1.7.0_09\bin
- bạn gần như chắc chắn có một phiên bản JDK mới hơn, sẽ có một đường dẫn khác.
- Cái mới
PATH
chỉ áp dụng cho phiên cmd hiện tại. Bạn sẽ phải nhập lại set
lệnh mỗi khi bạn mở Command Prompt.
Điểm # 1 và # 2 có thể được giải quyết bằng phiên bản tốt hơn một chút này:
C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%
Nhưng nó chỉ là một ý tưởng tồi nói chung.
Tìm đường dẫn Java
Cách đúng bắt đầu với việc tìm nơi bạn đã cài đặt Java. Điều này phụ thuộc vào cách bạn đã cài đặt Java.
Trình cài đặt exe
Bạn đã cài đặt Java bằng cách chạy chương trình thiết lập. Trình cài đặt của Oracle đặt các phiên bản Java dưới C:\Program Files\Java\
(hoặc C:\Program Files (x86)\Java\
). Với File Explorer hoặc Command Prompt, điều hướng đến thư mục đó.
Mỗi thư mục con đại diện cho một phiên bản của Java. Nếu chỉ có một, bạn đã tìm thấy nó. Nếu không, chọn một phiên bản giống như phiên bản mới hơn. Đảm bảo tên thư mục bắt đầu bằng jdk
(trái ngược với jre
). Nhập thư mục.
Sau đó nhập bin
thư mục đó.
Bây giờ bạn đang ở trong thư mục chính xác. Sao chép đường dẫn. Nếu trong File Explorer, bấm vào thanh địa chỉ. Nếu trong Command Prompt, sao chép lời nhắc.
Đường dẫn Java kết quả phải ở dạng (không có dấu ngoặc kép):
C:\Program Files\Java\jdkxxxx\bin\
Tệp zip
Bạn đã tải xuống một tệp .zip chứa JDK. Trích xuất nó đến một nơi ngẫu nhiên mà nó sẽ không cản trở bạn; C:\Java\
là một lựa chọn chấp nhận được.
Sau đó xác định vị trí bin
thư mục ở đâu đó trong đó.
Bây giờ bạn đang ở trong thư mục chính xác. Sao chép đường dẫn của nó. Đây là đường dẫn Java.
Hãy nhớ không bao giờ di chuyển thư mục, vì điều đó sẽ làm mất hiệu lực đường dẫn.
Mở hộp thoại cài đặt
Đó là hộp thoại để chỉnh sửa PATH
. Có nhiều cách để truy cập hộp thoại đó, tùy thuộc vào phiên bản Windows, cài đặt giao diện người dùng và cách cấu hình hệ thống của bạn bị rối.
Hãy thử một vài trong số này:
- Bắt đầu hộp tìm kiếm Menu / thanh tác vụ »tìm kiếm" biến môi trường "
- Thắng + R »
control sysdm.cpl,,3
- Thắng + R »
SystemPropertiesAdvanced.exe
» Biến môi trường
- File Explorer »nhập vào thanh địa chỉ
Control Panel\System and Security\System
» Cài đặt hệ thống nâng cao (ngoài cùng bên trái, trong thanh bên) »Biến môi trường
- Máy tính để bàn »bấm chuột phải vào PC này» Thuộc tính »Cài đặt hệ thống nâng cao» Biến môi trường
- Menu Bắt đầu »bấm chuột phải vào Máy tính» Thuộc tính »Cài đặt hệ thống nâng cao» Biến môi trường
- Bảng điều khiển (chế độ biểu tượng) »Hệ thống» Cài đặt hệ thống nâng cao »Biến môi trường
- Bảng điều khiển (chế độ danh mục) »Hệ thống và bảo mật» Hệ thống »Cài đặt hệ thống nâng cao» Biến môi trường
- Máy tính để bàn »bấm chuột phải vào Máy tính của tôi» Nâng cao »Biến môi trường
- Bảng điều khiển »Hệ thống» Nâng cao »Biến môi trường
Bất kỳ trong số này sẽ đưa bạn đến hộp thoại cài đặt đúng.
Nếu bạn đang dùng Windows 10, Microsoft đã ban phước cho bạn một giao diện người dùng mới lạ mắt để chỉnh sửa PATH
. Nếu không, bạn sẽ thấy PATH
trong vinh quang đầy dấu chấm phẩy đầy đủ của nó, được nén vào một hộp văn bản một dòng. Làm hết sức mình để thực hiện các chỉnh sửa cần thiết mà không phá vỡ hệ thống của bạn.
Dọn dẹp PATH
Nhìn vào PATH
. Bạn gần như chắc chắn có hai PATH
biến (vì biến người dùng và biến môi trường hệ thống). Bạn cần nhìn vào cả hai.
Kiểm tra các đường dẫn Java khác và loại bỏ chúng. Sự tồn tại của họ có thể gây ra tất cả các loại xung đột. (Ví dụ: nếu bạn có JRE 8 và JDK 11 theo PATH
thứ tự đó, thì javac
sẽ gọi trình biên dịch Java 11, sẽ tạo .class
các tệp phiên bản 55 , nhưng java
sẽ gọi JVM Java 8, chỉ hỗ trợ tối đa phiên bản 52 và bạn sẽ gặp các lỗi phiên bản không được hỗ trợ và không thể biên dịch và chạy bất kỳ chương trình nào.) Khắc phục các sự cố này bằng cách đảm bảo bạn chỉ có một đường dẫn Java PATH
. Và trong khi bạn đang ở đó, bạn cũng có thể gỡ cài đặt các phiên bản Java cũ . Và hãy nhớ rằng bạn không cần phải có cả JDK và JRE.
Nếu bạn có C:\ProgramData\Oracle\Java\javapath
, loại bỏ nó là tốt . Oracle dự định giải quyết vấn đề phá vỡ các đường dẫn Java sau khi nâng cấp bằng cách tạo một liên kết tượng trưng luôn luôn chỉ đến bản cài đặt Java mới nhất. Thật không may, nó thường kết thúc chỉ vào vị trí sai hoặc đơn giản là không hoạt động . Tốt hơn là xóa mục này và quản lý thủ công đường dẫn Java.
Bây giờ cũng là một cơ hội tốt để thực hiện vệ sinh chung trên PATH
. Nếu bạn có các đường dẫn liên quan đến phần mềm không còn được cài đặt trên PC, bạn có thể xóa chúng. Bạn cũng có thể xáo trộn thứ tự các đường dẫn xung quanh (nếu bạn quan tâm đến những thứ như vậy).
Thêm vào PATH
Bây giờ, đi theo đường dẫn Java mà bạn đã tìm thấy ba bước trước và đặt nó vào hệ thống PATH
.
Nó không quan trọng nơi danh sách con đường mới của bạn đi đâu; đặt nó ở cuối là một lựa chọn tốt.
Nếu bạn đang sử dụng Giao diện người dùng trước Windows 10, hãy đảm bảo bạn đã đặt dấu chấm phẩy chính xác. Cần có chính xác một đường phân cách mọi đường dẫn trong danh sách.
Thực sự không có gì khác để nói ở đây. Chỉ cần thêm đường dẫn PATH
và nhấp vào OK.
Bộ JAVA_HOME
Trong khi bạn đang ở đó, bạn cũng có thể thiết lập JAVA_HOME
. Đây là một biến môi trường khác cũng có chứa đường dẫn Java. Nhiều chương trình Java và không phải Java, bao gồm các hệ thống xây dựng Java phổ biến Maven và Gradle , sẽ đưa ra các lỗi nếu nó không được đặt chính xác.
Nếu JAVA_HOME
không tồn tại, tạo nó như một biến môi trường hệ thống mới. Đặt nó vào đường dẫn của thư mục Java mà không có bin/
thư mục, tức là C:\Program Files\Java\jdkxxxx\
.
Nhớ chỉnh sửa JAVA_HOME
sau khi nâng cấp Java.
Đóng và mở lại Dấu nhắc lệnh
Mặc dù bạn đã sửa đổi PATH
, tất cả các chương trình đang chạy, bao gồm cmd, chỉ nhìn thấy cái cũ PATH
. Điều này là do danh sách tất cả các biến môi trường chỉ được sao chép vào một chương trình khi nó bắt đầu thực thi; Sau đó, nó chỉ tư vấn các bản sao được lưu trữ.
Không có cách nào tốt để làm mới các biến môi trường của cmd , vì vậy chỉ cần đóng Command Prompt và mở lại. Nếu bạn đang sử dụng IDE, hãy đóng và mở lại.
Xem thêm