javac không được công nhận là một lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó [đã đóng]


253

Tôi đang gặp lỗi trong khi cố gắng biên dịch các chương trình Java.

Tôi đang dùng Windows (đây là sự cố dành riêng cho Windows) và tôi đã cài đặt JDK mới nhất.

Tôi đã thử một giải pháp liên quan đến PATHbiến, nhưng lỗi vẫn còn.

Bảng điều khiển đầu ra:

C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.java
'javac' is not recognized as an internal or external command,
operable program or batch file.

7
tôi nghĩ rằng con đường của bạn không được thiết lập. đi đến môi trường của bạn và đặt đường dẫn của họ
Ron

2
Câu hỏi này dường như không có chủ đề vì có thể dễ dàng tìm thấy trong các hướng dẫn cài đặt JDK thực tế và câu trả lời có cập nhật và có chất lượng cao hơn bất kỳ câu trả lời nào ở đây. Nó cũng có sẵn, cho tất cả các nền tảng, trong chương đầu tiên của hướng dẫn bắt đầu chính thức .
Jason C

8
Ta cho thông tin Jason C. Nhưng tôi thú nhận rằng tôi thấy quyết định gọi chủ đề này ngoài chủ đề dường như là tỷ lệ cược với số lượng người khác đã đưa ra câu trả lời này. Như tôi sắp làm.
Matt Stevens


Thêm một biến mới sẽ dễ dàng hơn và một khi bạn tạo một biến mới "PATH", hãy đảm bảo bạn thêm dấu chấm phẩy (;) và kết thúc giá trị.
Amir Md Amiruzzaman

Câu trả lời:


434

TL; DR

Dành cho độc giả có kinh nghiệm:

  1. Tìm đường dẫn Java; nó trông như thế này:C:\Program Files\Java\jdkxxxx\bin\
  2. Menu bắt đầu tìm kiếm "biến môi trường" để mở hộp thoại tùy chọn.
  3. Xem xét PATH . Xóa các đường dẫn Java cũ.
  4. Thêm đường dẫn Java mới vào PATH .
  5. Biên tập JAVA_HOME .
  6. Đó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.exevị 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ùngbiế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, PATHlà:

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 đó javackhông phải là lệnh nội bộ , sẽ tìm kiếm hệ thống PATHtheo 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.batvv 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 javanhưng khôngjavac .
  • Các Java Development Kit (JDK), trong đó có cả hai javajavac, 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 javacvì 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 đó:

  1. Lệnh này xóa mọi thứ khác khỏi PATHvà 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.
  2. Đườ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.
  3. 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 setlệ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 binthư 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í binthư 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 PATHtrong 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 PATHbiế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 PATHthứ tự đó, thì javacsẽ gọi trình biên dịch Java 11, sẽ tạo .classcác tệp phiên bản 55 , nhưng javasẽ 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 PATHvà 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 MavenGradle , sẽ đưa ra các lỗi nếu nó không được đặt chính xác.

Nếu JAVA_HOMEkhô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_HOMEsau 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


7
Điều này làm việc cho tôi, nhưng trước khi tôi cố gắng thêm vị trí ở cuối chuỗi Đường dẫn. Tại sao nó chỉ hoạt động lúc đầu?
Eric H.

4
Cảm ơn! cái này hiệu quả với tôi @Eric H: Thêm vào cuối hoạt động cho tôi. Theo những gì tôi hiểu, nó đi qua Đường dẫn từ trái sang phải và tìm kiếm javac.exe. Vì vậy, có thể bạn có nó trong một số thư mục ở phía trước và javac.exe không hoạt động.
Đào Lâm

36
+1 để đóng dòng lệnh sau đó mở lại, nó hoạt động với tôi!
Sameh Deabes

Liệu nó có ý nghĩa nếu tôi có phiên bản khác của jdk và jre trên máy tính của mình không?
Aaron Liu

Tôi đã học được rất nhiều điều về hệ điều hành trong khi thiết lập các biến này và tất cả những thứ đó. cảm ơn người đàn ông
Aniket Jadhav

77

Hãy thử điều này .. Tôi cũng đã có nó nhưng bây giờ nó đã giải quyết trong XP ..

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java

45

Bạn đã nhập sai setlệnh - bạn đã bỏ lỡ dấu gạch chéo ngược sau đó C:. Nó nên là:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin

1
Tôi đã bỏ lỡ điều đó đúng nhưng đó là lỗi đánh máy của tôi khi đăng mối quan tâm của tôi ở đây. Tôi đã kiểm tra nó và mọi thứ được viết đúng chính tả nhưng vẫn cho tôi cùng một lỗi.
dùng987137

1
@ người dùng987137. Rõ ràng, một cái gì đó là không chính xác. JDK (nhớ bạn - JDK không phải JRE) được cài đặt ở vị trí đã chỉ định - C:\Program Files (x86)\Java\jdk1.7.0? Nếu vậy, điều gì xảy ra nếu bạn làm cd C:\Program Files (x86)\Java\jdk1.7.0\binvà sau đó javac -version?
Raghuram

3
Tôi đã gặp lỗi tương tự khi thiết lập JDK trên Win XP mặc dù tôi đã đặt đúng đường dẫn. Đơn giản chỉ cần đóng dấu nhắc lệnh và mở lại nó đã sửa nó.
Chris J

@ChrisJ - Điều này là do dấu nhắc lệnh mới sẽ được bắt đầu trong một phiên mới và do đó cũng tải các biến môi trường được cập nhật.
Cyclonecode

17

Chạy phần sau từ dấu nhắc lệnh: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" hoặc set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

Tôi đã thử điều này và nó hoạt động tốt.


thx, cái này hoạt động trên Windows
Csaba

Câu trả lời tốt. Làm việc cho tôi trên Windows 10
Roger

5

Nếu lệnh java đang hoạt động và gặp vấn đề với javac. sau đó trước tiên hãy kiểm tra trong tập tin javac.exe bin của jdk có hay không. Nếu tệp javac.exe tồn tại thì đặt JAVA_HOMElàm biến hệ thống.


3

Kiểm tra các biến môi trường của bạn.

Trong trường hợp của tôi, tôi đã đặt JAVA_HOME trong các biến Hệ thống cũng như các biến Tài khoản người dùng của tôi và biến sau được đặt thành phiên bản Java sai . Tôi cũng gặp vấn đề tương tự với biến Path.

Sau khi xóa JAVA_HOME khỏi các biến Tài khoản người dùng của tôi và xóa đường dẫn sai khỏi biến Đường dẫn, nó hoạt động chính xác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.