(Không chắc liệu điều này có nên tiếp tục SU ... di chuyển chắc chắn là một lựa chọn, nhưng nhiều lập trình viên đọc câu hỏi ở đây, vì vậy hãy tiếp tục).
Tôi đang chạy Mac OS X 10.8.4 và tôi đã cài đặt JDK 1.6.0_51 của Apple cũng như JDK 1.7.0_25 của Oracle. Gần đây tôi đã cài đặt JDK bản xem trước 1.8 của Oracle cho một số phần mềm phát hành trước yêu cầu nó. Bây giờ, khi tôi chạy / usr / libexec / java_home, tôi nhận được:
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
1.8.0, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
1.7.0_25, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
1.6.0_51-b11-457, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_51-b11-457, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Tuyệt quá.
Tuy nhiên, đang chạy:
$ java -version
Lợi nhuận:
java version "1.8.0-ea"
Điều đó có nghĩa là phiên bản mặc định của Java hiện là phiên bản phát hành trước, phiên bản này phá vỡ một số gói "bình thường" (trong trường hợp của tôi là VisualVM).
Tôi không thể đặt JAVA_HOME
vì khởi chạy ứng dụng bỏ qua các biến môi trường, ngay cả khi khởi chạy từ dòng lệnh (ví dụ $ open /Applications/VisualVM.app
:).
Vì vậy, có tệp nào tôi có thể chỉnh sửa để đặt tùy chọn đặt hàng JVM trên toàn cầu không?
(Vui lòng không yêu cầu tôi khởi chạy Java Preferences Panel vì điều đó đơn giản là không hoạt động: nó không chứa bất kỳ thứ gì hữu ích và chỉ liệt kê một trong 4 JVM mà tôi đã cài đặt.)
Cập nhật :
Oracle JVM hiện có /Library/Java/JavaVirtualMachines
. Đặt lại tên thư mục JDK 1.8 để jdk1.8.0.jvm.xyz
không thay đổi bất cứ điều gì: java_home
vẫn tìm thấy nó ở đúng vị trí và chạy / usr / bin / java vẫn thực hiện 1.8 JVM. Đây không phải là vấn đề với các liên kết đồng bộ, v.v.
Câu trả lời cho các câu hỏi tương tự
Mặc dù câu trả lời này đưa ra số tiền mà một cuộc tấn công sẽ loại bỏ các phiên bản Java khỏi java_home, nhưng nó vẫn không trả lời câu hỏi này về cách java_home chọn mặc định của nó và liệu người dùng có thể thiết lập nó không phá hủy hay không .
/usr/bin/java
chỉ đến /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
. Thư mục Versions
không chứa liên kết biểu tượng đến 1.8.0 JDK. Thay vào đó, nó chứa một thư mục được gọi hữu ích A
mà Current
trỏ đến. A
không phải là "JAVA_HOME. Nó có một thư mục con được gọi là thư mục con Commands
có java
lệnh, nhưng nó là một nhị phân phổ quát không rõ ràng để ai-biết-cái-gì. Tôi nghi ngờ nó sử dụng java_home
, v.v. để quyết định JVM nào sẽ sử dụng.
/usr/bin/java
chỉ là một liên kết tượng trưng