javac không hoạt động trong dấu nhắc lệnh của windows


132

Tôi đang cố gắng sử dụng javacvới dấu nhắc lệnh của windows, nhưng nó không hoạt động.

Sau khi thêm thư "C:\Program Files\Java\jdk1.6.0_16\bin\"mục vào cuối PATHbiến môi trường, javalệnh hoạt động tốt, nhưng việc sử dụng javacmang lại cho tôi lỗi sau:

'javac' không được công nhận là 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ó.


Câu trả lời:


162

Nếu bạn đã thêm nó trong bảng điều khiển trong khi dấu nhắc lệnh của bạn mở, điều đó sẽ không ảnh hưởng đến dấu nhắc lệnh hiện tại của bạn. Bạn sẽ cần phải thoát ra và mở lại hoặc đơn giản là:

set "path=%path%;c:\program files\java\jdk1.6.0_16\bin"

Bằng cách kiểm tra, thực hiện:

echo %path%

từ dấu nhắc lệnh của bạn và cho chúng tôi biết nó là gì.

Nếu không, chắc chắn có một javac trong thư mục đó bằng cách cố gắng:

"c:\program files\java\jdk1.6.0_16\bin\javac.exe"

từ dấu nhắc lệnh. Bạn cũng có thể nói đó thực thi (nếu có) đang được sử dụng với lệnh:

for %i in (javac.exe) do @echo %~$PATH:i

Đây là một thủ thuật gọn gàng tương tự như whichvà / hoặc whencecác lệnh trong một số hệ điều hành kiểu UNIX.


11
à vâng, tất cả những gì tôi phải làm là mở lại dấu nhắc lệnh và nó hoạt động tốt, cảm ơn!
Domenic

1
+1. "For% i in (java.exe) do @echo% ~ $ PATH: i" vừa lưu lại ngày của tôi. Tôi chỉ là một người dùng Windows không thường xuyên và tôi chỉ không biết có thể có một java.exe ẩn khác trong c: \ windows \ system :)
a.

1
Lệnh set path ở trên không hoạt động với tôi trong windows 7. Tôi đã phải sử dụng set path = "% path%; c: \ program files \ java \ jdk1.6.0_16 \ bin. Không có dấu ngoặc kép! Tôi không quen với dòng lệnh windows nhưng có vẻ như các trích dẫn được giữ nguyên. Vì vậy, việc đặt chúng trong% path% sẽ khiến nó hoàn toàn không sử dụng được
user716468

@ user716468, Có một cách GUI để làm điều này trong windows thay vì dòng lệnh. Nếu bạn đang ở trên windows 7, chỉ cần gõ var trong tìm kiếm menu bắt đầu và nhấp vào Chỉnh sửa biến môi trường. Nếu bạn đang dùng Windows XP, nhấp chuột phải vào Máy tính của tôi, Nhấp vào thuộc tính, chuyển đến tab nâng cao và nhấp vào nút Biến môi trường ở phía dưới. Ở đó bạn có thể tìm thấy hai hộp danh sách. Tìm ra cái có tên PATH từ hộp danh sách dưới cùng và nhấp vào Chỉnh sửa. Bây giờ nối đường dẫn đến JDK của bạn trước dấu chấm phẩy. Bạn đã hoàn tất!
fz_salam

cũng có một lệnh "where" trong các dòng lệnh windows gần đây
x29a

87

Hệ điều hành Windows tìm kiếm thư mục hiện tại và các thư mục được liệt kê trong biến môi trường PATH cho các chương trình thực thi. Các chương trình của JDK (như trình biên dịch Java javac.exe và Java.exe java.exe) nằm trong thư mục "\ bin" (trong đó biểu thị thư mục đã cài đặt JDK, ví dụ: C: \ Program Files \ Java \ jdk1.8.0_xx). Bạn cần bao gồm thư mục "\ bin" trong PATH.

Để chỉnh sửa biến môi trường PATH trong Windows XP / Vista / 7/8:

  1. Bảng điều khiển Hệ thống settings Cài đặt hệ thống nâng cao

  2. Chuyển sang tab "Nâng cao" Biến môi trường

  3. Trong "Biến hệ thống", cuộn xuống để chọn "PATH" Chỉnh sửa

((bây giờ đọc 3 lần sau trước khi tiếp tục, KHÔNG CÓ UNDO ))

Trong trường "Giá trị biến", INSERT "c: \ Program Files \ Java \ jdk1.8.0_xx \ bin" (Thay thế xx bằng số nâng cấp và XÁC MINH rằng đây là thư mục nhị phân của JDK của bạn !!!) IN FRONT của tất cả các tệp hiện có các thư mục, theo sau là dấu chấm phẩy (;) ngăn cách thư mục nhị phân của JDK với phần còn lại của các thư mục hiện có. KHÔNG XÓA bất kỳ mục hiện có; mặt khác, một số ứng dụng hiện có có thể không chạy.

Variable name  : PATH
Variable value : c:\Program Files\Java\jdk1.8.0_xx\bin;[existing entries...]

Ảnh chụp màn hình


Đối với Bước 4. Tôi thấy rằng tôi phải chọn không phải là <yournumber>, mà là jdk <yournumber>. Sau đó, mọi thứ khác hoạt động tốt.
Morgan Kenyon

Rõ ràng và gọn gàng! Câu trả lời tốt nhất. Đã làm cho tôi.
M_R_K

Trong trường hợp của tôi, cho bước 4, tôi đã mở jdk. Về bản chất, tôi đã có cái này cho PATH: C: \ Program Files \ Java \ jdk1.7.0_67 \ bin. javac.exe không có trong jre mà trong jdk.
sedeh

Hoạt động cho tôi :)
RAJESH KUMAR ARUMUGAM

34

Sau một thời gian dài Google, tôi biết rằng javac.exe sẽ nằm trong JDK (C: \ Program Files \ Java \ jdk (số phiên bản) \ bin) không nằm trong JRE (C: \ Program Files (x86) \ Java \ jre7 \ bin) "JRE không đi kèm với trình biên dịch. Nó (JRE) đơn giản là một môi trường thời gian chạy java. Cái bạn cần là bộ công cụ phát triển Java." để sử dụng trình biên dịch javac

javac sẽ không hoạt động nếu bạn đang trỏ bin bên trong jre

Để sử dụng javac trong cmd, JDK phải được cài đặt trong hệ thống của bạn ...

Đối với đường dẫn javac

path = C: \ Program Files (x86) \ Java \ jre7 \ bin điều này là sai

path = C: \ Program Files \ Java \ jdk (số phiên bản) \ bin điều này là chính xác

Đảm bảo rằng "javac.exe" nằm trong "C: \ Program Files \ Java \ jdk (số phiên bản) \ bin" của bạn

Đừng nhầm lẫn với JRE và JDK cả hai đều hoàn toàn khác nhau

nếu bạn không có JDK, vui lòng tải xuống từ liên kết này

https://jdk.java.net/

hoặc là

http://www.oracle.com/technetwork/java/javase/doads/index.html

luồng tham chiếu cho JDK VS JRE Sự khác biệt giữa JDK và JRE là gì?


6

Tôi biết đây có thể không phải là lỗi cụ thể của bạn, nhưng tôi đã từng có một không gian hàng đầu trong đường dẫn của mình và java sẽ hoạt động nhưng javac thì không.

Đối với những gì nó có giá trị, tôi cung cấp lời khuyên hiền triết: "Kiểm tra chặt chẽ con đường của bạn".


5

Hãy thử các giải pháp tại đây: http://techdem.centerkey.com/2009/05/javahome-command-script.html

Chúng thay đổi mạnh mẽ hơn nhiều - như khi bạn nâng cấp JDK hoặc JRE, vì không có đường dẫn được mã hóa cứng.

Giải pháp nhanh chóng (nếu bạn không muốn đọc blog) là

C:\>for /d %i in ("\Program Files\Java\jdk*") do set JAVA_HOME=%i
C:\>set PATH=%PATH%;%JAVA_HOME%

Sau đó, bạn có thể thêm các dòng này vào một kịch bản khởi động / đăng nhập.


2
Để gọi javac như thế, tôi đã phải sử dụng "set PATH =% PATH%;% JAVA_HOME% \ bin" (chú ý thêm \ bin).
dùng31389

4

Tôi chỉ phải làm điều này để làm việc này trên windows 7 64.

Mở một dấu nhắc lệnh (cmd.exe) và gõ:

set CLASSPATH=C:\Program Files\Java\jdk1.7.0_01\bin

Hãy chắc chắn rằng bạn mở lại tất cả các dấu nhắc lệnh đang chạy Windows để cập nhật biến môi trường.


1
Tôi đoán không đặt classpath là tốt hơn ở đây. Tôi sẽ không sử dụng biến CLASSPATH, đặc biệt không phải trên Windows nơi nó là toàn cầu và ảnh hưởng đến nhiều JRE ...
eckes

4

Được rồi, điều này không thể luôn luôn như vậy nhưng nhiều người trong chúng ta đã từng mắc lỗi này trong quá khứ và một vài trong số họ vẫn không biết về nó, đó là, mỗi khi bạn nối một đường dẫn (bất kỳ đường dẫn nào) của bất kỳ biến môi trường nào, bạn Sẽ có khả năng nhấn vào thanh không gian ngay sau "dấu chấm phẩy" (như bạn thường làm, sau "khoảng thời gian" trong khi gõ một trình soạn thảo).

Điều này sẽ tạo ra một không gian hàng đầu trong đường dẫn, ví dụ: "C: \ Program Files \ Java \ jdk1.6.0 \ bin" và do đó "javac.exe" sẽ không được hệ thống tìm thấy.


2

Thay đổi thư mục "jdk1.7.0_45" "jdk1_7_0_60" và cập nhật đường dẫn trong môi trường Windows. Mặt khác, đường dẫn bỏ qua dấu chấm ở phía trước, viết tắt của tệp ẩn và do đó thư mục không được hiển thị trong chuỗi PATH.


0

"; C: \ Chương trình tập tin \ Java \ jdk1.6.0 \ bin" đôi khi bạn có thể quên đặt dấu chấm phẩy trên đường dẫn hiện có cuối cùng.


0

Tôi đã đối mặt với cùng một vấn đề chính là java sẽ hoạt động nhưng javac sẽ không xuất hiện trên dấu nhắc cmd trong Windows 8.

Vấn đề xảy ra do tôi quên xóa '>'ở cuối tên đường dẫn, nghĩa là như thế này:

C:\Program Files\Java\jdk*\bin>

nơi mà nó được cho là như thế này:

C:\Program Files\Java\jdk*\bin

0

Đường dẫn sẽ chỉ được đặt cho tài khoản quản trị viên. Do đó, điều quan trọng là khởi chạy dấu nhắc lệnh với tư cách quản trị viên, nếu bạn chưa có.


0

Đảm bảo bạn không cho phép khoảng trắng (khoảng trắng) ở giữa các đường dẫn trong biến Đường dẫn. Vấn đề của tôi là tôi có khoảng trắng và tôi tin rằng Windows coi nó như một NULL và không đọc đường dẫn của tôi cho Java.


0

Tôi đã có cùng một vấn đề được đăng trong tiêu đề này. Java sẽ hoạt động, nhưng javacsẽ không trong dấu nhắc lệnh Windows ( cmd.exe).

Đối với tôi, đơn giản là tôi đã đặt một khoảng trắng khi thêm C:\Program Files\Java\jdk1.8.0\binvào cuối %PATH%biến môi trường của mình .
Xóa khoảng trống giữa ;và đường dẫn tệp tiếp theo.


0

Tôi đánh giá cao đây là một câu hỏi cũ nhưng giải pháp của tôi không phải là câu trả lời ở đây vì vậy hãy đăng nó trong trường hợp bất kỳ ai khác thử tất cả phần còn lại.

Trong trường hợp của tôi, một bản cài đặt trước của JRE Java (trong ProgramData / Oracle / Java) có một biến đường dẫn ở đầu danh sách các biến đường dẫn của tôi. Nội dung của đường dẫn "Oracle" đó có java.exe nhưng không phải là javac.exe. Tôi đã thêm đường dẫn JDK đầy đủ của mình vào đầu danh sách các biến đường dẫn, trước biến "Oracle" và sau đó chọn javac.exe cũng như java.


0
for /d %i in ("\Program Files\Java\jdk*") do set JAVA_HOME=%i
set JAVA_HOME

giải pháp này hiệu quả với tôi


Tôi đề nghị thêm trực tiếp chú thích vào câu trả lời của bạn thay vì chỉ cung cấp một liên kết: liên kết có thể bị hỏng. Trân trọng
YakovL

-3

Khi tôi cố gắng tạo .java thành. Class, lệnh Javac không hoạt động. Tôi đã làm cho nó hoạt động bằng cách truy cập C: \ Program Files (x86) \ Java \ jdk1.7.0_04 \ bin và khi tôi ở trên thư mục đó, tôi đã gõ Javac.exe C \ Test \ test.java và nó đã tạo ra lớp với nó chiến thuật. Hãy thử nó.


-7

Đặt nó là "C: \ Chương trình tập tin \ Java \ jdk1.6.0_16 \ bin". Xóa dấu gạch chéo ngược nó sẽ hoạt động


2
Tôi không nghĩ đó là chính xác. Tôi có thể đặt đường dẫn của mình thành không có gì ngoài "C: \ Program Files \ Java \ jdk1.6.0_16 \ bin \" (với dấu gạch chéo) và nó vẫn hoạt động tốt.
paxdiablo
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.