JAVA_HOME ở đâu trên macOS Mojave (10.14) đến Lion (10.7)?


559

Java là gói tùy chọn trên các phiên bản macOS mới nhất.

Tuy nhiên, sau khi cài đặt, có vẻ như biến môi trường JAVA_HOME không được đặt đúng .


1
Bản sao có thể có của Tôi nên đặt JAVA_HOME thành gì trên OSX
mipadi

Trên Mac Sierra I / Library / Java / JavaVirtualMachines có jdk và System Preferences> Java có gì khác nhau giữa 2 cái này?
vikramvi

câu hỏi khác, cảm ơn bạn
Olivier Refalo

Đừng đánh giá thấp khả năng cài đặt Java của bạn có thể chưa hoàn thành đúng cách. Nếu không có gợi ý tuyệt vời nào dưới đây có vẻ hiệu quả, hãy thử cài đặt lại!
MarkHu

Câu trả lời:


1059

Với gói tùy chọn Java hoặc Oracle JDK được cài đặt, việc thêm một trong các dòng sau vào tệp ~ / .bash_profile của bạn sẽ đặt biến môi trường tương ứng.

export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

Cập nhật: đã thêm cờ -v dựa trên phản hồi của Jilles van Gurp .


1
Tốt để biết. Tôi phải nói rằng tôi không quá hồi hộp với danh sách tính năng cho Lion. Dường như không có nhiều thứ trong cách cải tiến cho việc sử dụng của tôi ...
prodigitalson

1
@Oliver: ewww :-) Đó có lẽ là điều ít hữu ích nhất ... tôi luôn có nhiều cửa sổ được mở và sắp xếp trên màn hình để tôi có thể thấy nhiều thứ cùng một lúc ... thường là một bố cục khác nhau trên mỗi không gian.
prodigitalson

11
điều này đã không làm việc cho tôi. / System / L Library / Frameworks / JavaVM.framework / Home đã làm việc.
chaostheory

7
Hoạt động trên Maverick, quá!
cbare

3
Đối với Java 11 và High Sierra, xuất JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Willie Z

112

/usr/libexec/java_homekhông phải là một thư mục mà là một thực thi. Nó xuất ra JAVA_HOME hiện được cấu hình và không thực sự thay đổi nó. Đó là những gì ứng dụng Tùy chọn Java dành cho, trong trường hợp của tôi dường như bị hỏng và thực sự không thay đổi JVM chính xác. Nó liệt kê 1.7 JVM nhưng tôi có thể chuyển / gỡ và kéo và thả tất cả những gì tôi muốn ở đó mà không thực sự thay đổi đầu ra /usr/libexec/java_home.

Ngay cả sau khi cài đặt 1.7.0 u6 từ Oracle trên Lion và đặt nó làm mặc định trong các tùy chọn, nó vẫn trả về nhà apple 1.6 java. Cách khắc phục duy nhất thực sự hiệu quả với tôi là cài đặt JAVA_HOME theo cách thủ công:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/

Ít nhất theo cách này khi chạy từ dòng lệnh, nó sẽ sử dụng 1.7. /usr/libexec/java_homevẫn nhấn mạnh vào 1.6.

Cập nhật : Hiểu Java từ dòng lệnh trên OSX có giải thích tốt hơn về cách thức hoạt động của nó.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

là cách để làm điều đó Lưu ý, cập nhật lên 1.8 hoạt động tốt.


blog.hgomez.net/2012/07 đã bị hỏng nhưng nó đã được sửa trong câu trả lời hiện liên kết đến web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/ Khăn
Matt C

xuất JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
Leo Nguyễn

83

Đối với tôi, Mountain Lion 10.8.2, giải pháp được bình chọn nhiều nhất không hoạt động. Tôi đã cài đặt jdk 1.7 qua Oracle và maven từ homebrew.

Giải pháp của tôi là từ tệp hadoop-env.sh của hadoop mà tôi đã cài đặt từ homebrew. Tôi thêm câu dưới đây vào ~ / .bash_profile, và nó hoạt động.

export JAVA_HOME="$(/usr/libexec/java_home)"

Giải pháp này cũng hoạt động cho OS X Yosemite với Java 1.8 được cài đặt từ Oracle.


1
Nó sẽ hoạt động nếu bạn đã cài đặt java 6 từ Apple. vấn đề ở đây là bạn đang sử dụng oracle java 7.
Olivier Refalo

2
Điều này làm việc cho tôi trên Mavricks rất tốt nhưng vị trí của tập lệnh java_home thì khác. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost

1
Tôi đã cố gắng thiết lập maven trên mac Yosemite, cách này để thiết lập JAVA_HOME hoạt động với tôi.
Al Focus

Hoạt động với tôi trên Sierra 10.12 và Java 8
Kanak Sony

41

Không có câu trả lời nào ở trên giúp tôi. Tôi cho rằng tất cả các câu trả lời là dành cho người giàOS X

Đối với OS X Yosemite 10.10, hãy làm theo các bước sau

Sử dụng trình soạn thảo văn bản yêu thích của bạn để mở: ~/.bash_profile

//This command will open the file using vim
$ vim ~/.bash_profile

Thêm dòng sau vào tệp và lưu nó (: theo sau là "x" cho vim):

export JAVA_HOME=$(/usr/libexec/java_home)

Sau đó, trong thiết bị đầu cuối gõ hai lệnh sau để xem đầu ra:

$ source ~/.bash_profile

$ echo $JAVA_HOME

Trong dòng thứ hai, bạn đang cập nhật nội dung của .bash_profiletệp.


Tôi nghĩ rằng tôi đã nhận được pb của bạn - bạn sử dụng dấu ngoặc kép thay vì backquote 'vs `
Olivier Refalo

Không, tôi đang sử dụng các trích dẫn đúng, thay vào đó tôi đã thử dán sao chép, nó không hoạt động. Tôi cập nhật câu trả lời của tôi vì nó làm việc cho tôi.
Giri

@OlivierRefalo Tôi có thể thấy bạn đã cập nhật câu trả lời của mình bằng dấu ngoặc kép ("). Nhưng ngay cả khi không có dấu ngoặc kép, nó vẫn hoạt động.
Giri

Cảm ơn rất nhiều . Nó hoạt động với tôi tại Yosemite 10.10
Vijay

2
Đây là giải pháp duy nhất, thực sự hoạt động. Thêm đường dẫn bằng bất kỳ giải pháp nào khác, sẽ thêm vào trên cơ sở tạm thời, cho đến khi bạn chấm dứt thiết bị đầu cuối và đường dẫn biến mất. Để được thêm vĩnh viễn, đường dẫn phải được lưu trong tệp .bash_profile. Trong khi đó, tôi sử dụng nano chứ không phải vim, vì đơn giản.
Nadeem Jamali

31

Cập nhật cho Java 9 và một số bí danh gọn gàng.

Trong .bash_profile:

export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`

Lưu ý, đối với phiên bản mới nhất thì có 9và không 1.9.

Đặt Java hoạt động:

export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH

Một số bí danh bổ sung để chuyển đổi giữa các phiên bản khác nhau:

alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'

Kiểm tra trong thiết bị đầu cuối:

% j8
% java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
% j9
% java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

EDIT: Cập nhật cho Java 10

export JAVA_HOME10=`/usr/libexec/java_home --version 10`
alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'

EDIT: Cập nhật cho Java 11

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'

29

Ở trên không làm việc cho tôi với các công cụ EC2 của Amazon, bởi vì nó hy vọng bin/java, vv bên dưới JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/HomeĐã làm việc.


Có phải là sư tử? bạn đã nhận được gói Java chính thức từ Apple hay Java6 / 7 từ Oracle chưa?
Olivier Refalo

Tôi tin rằng đó là gói Java của Apple.
Cawflands

1
@AndrewH vâng tôi thấy điều tương tự là đúng. Đã cài đặt gói Java của Apple và phát hiện đường dẫn thư viện thực tế (ví dụ: để đặt -vm trong eclipse.ini):
System / L Library / Java / Support / Deploy.bundle / Content / Home / lib / javaws.jar

Cảm ơn bạn về thông tin. Có thể tôi quá đơn giản, nhưng tại sao OS X lại biến một thứ đơn giản như vậy thành một mớ hỗn độn?
Kuberchaun

18

Đối với OS X, bạn có thể làm:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`

Đáng chú ý, HFS + không phân biệt chữ hoa chữ thường.
sufinawaz

14

Trên Mac OS X Lion, để đặt visualgc chạy, tôi đã sử dụng:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

1
Tôi không nhận được đề xuất của bạn: nó khác với xuất JAVA_HOME = /usr/libexec/java_home như thế nào? lệnh / usr / libexec / JAVA_HOME trả /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier Refalo

Đối với sản lượng visualgc / usr / libexec / java_home: java.exe được tìm thấy tại: / usr / libexec / java_home không có trong thư mục JDK. Vui lòng đặt và xuất biến môi trường JVMSTAT_JAVA_HOME của bạn để tham khảo một thư mục chứa JDK Sun J2SE 1.5.0 (không phải JRE) và thử lại.
EGHM

13

Sau đây làm việc cho tôi. Tôi đang sử dụng ZSH trên OSX Yosemite đã cài đặt Java 8.

Lệnh sau /usr/libexec/java_homephát ra đường dẫn đến JDK home:

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Trong bạn ~/.zshrc,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"

Làm thế nào là khác nhau mà giải pháp đề xuất?
Olivier Refalo

Nó không khác với giải pháp đề xuất. Giải pháp này dành riêng cho những người sử dụng ZSH, Java 8 và OSX Yosemite.
Hemanta

Xác nhận hoạt động như một bùa mê với java 1.8 được cài đặt trên OSX Yosemite, chúc mừng bạn đời.
Ashoor

Giải pháp chung chỉ hoạt động tốt cho Java 8, zsh và Yosemite.
yaauie

10

Một cách tốt hơn (có thể nâng cấp hơn) là sử dụng như sau:

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home

Điều này cũng sẽ hoạt động với AWS vì nó có binbên dưới Trang chủ


1
loại không đồng ý với tuyên bố đó "có thể nâng cấp hơn" / usr / libexec / java_home là một exe trả về một đường dẫn, không phải là một đường dẫn cố định. Bên cạnh tùy thuộc vào phiên bản jvm bạn sử dụng, đường dẫn ở trên sẽ không khớp
Olivier Refalo

10

Các JVM mới hơn của Oracle như 1.7.0_21-b12 dường như được cài đặt tại đây:

/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home


1
Thật vậy - và /usr/libexec/java_homecông cụ trả về lỗi cho các phiên bản Java này.
Joe Dyndale

1
Đây là câu trả lời duy nhất làm việc cho tôi sau khi tải xuống v1.7 JRE
maxrossello

2
Đây là đường dẫn nếu bạn cài đặt JRE. Hầu hết các câu trả lời và nhận xét được đánh giá là về JDK. Không giống nhau.
8 giờ 1

9

cho macOS Mojave 10.14.1 và JAVA 11.0.1 Tôi đặt cấu hình là

export JAVA_HOME=$(/usr/libexec/java_home)

Phím trong terminal này để xác nhận:

$JAVA_HOME/bin/java -version

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

1
Hoạt động trên Catalina. Ty
TuGordoBello

5

Cách tiếp cận của tôi là:

.bashrc

export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA_HOME=$JAVA6_HOME

# -- optional
# export PATH=$JAVA_HOME/bin:$PATH

Điều này giúp dễ dàng chuyển đổi giữa J6 và J7


@AdonisSMU bạn đã tìm ra giải pháp chưa?
Luccas

3

Tôi phải đặt nó một cách rõ ràng vào đường dẫn chính xác trên máy Macbook của tôi.

Các bước tiếp theo:

  1. cố gắng echo $JAVA_HOME(nếu được đặt, nó sẽ hiển thị đường dẫn), nếu không, hãy thử tìm kiếm bằng cách sử dụngsudo find /usr/ -name *jdk
  2. Chỉnh sửa Bash p với - sudo nano ~/.bash_profile
  3. Thêm đường dẫn chính xác vào JAVA Home (với đường dẫn từ bước 2 ở trên) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Lưu và thoát
  5. Kiểm tra JAVA_Home bằng cách sử dụng - echo $JAVA_HOME

Tôi đang chạy MACOS MOJAVE - 10.14.2 (18C54) trên Macbook Air với JAVA 8


2

Đối với Mac OS X 10.9, tôi đã cài đặt phiên bản JRE mới nhất từ ​​Oracle và sau đó đặt lại JAVA_HOME thành /L Library / Java / JavaVirtualMachines / jdk1.7.0_45.jdk /Contents / Home.

Tôi chắc chắn có một cách tốt hơn nhưng đã giúp tôi đứng dậy và chạy.

hughsmac: ~ hbrien $ echo $ JAVA_HOME /L Library / Java / JavaVirtualMachines / jdk1.7.0_45.jdk / Content / Home


1
Trên bản cài đặt Mavericks mới, đây là giải pháp duy nhất phù hợp với tôi. Phải trỏ nhà phát triển sqld đến nhà jdk nằm ở đây (theo đề xuất của chủ đề này để làm cho nó hoạt động.
Chris

2

OSX Yosemite, ZSH và Java SE Runtime Môi trường 8, tôi đã phải:

$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin

và trong ~ / .zshrc thay đổi JAVA_HOME thành export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"


1

Gặp vấn đề tương tự sau khi tôi nâng cấp hệ điều hành Mac và làm việc với tôi:

  1. cmd> vi ~ / .bash_profile

  2. Thêm / cập nhật dòng cho JAVA_HOME: export JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Nội dung / Trang chủ"

  3. cmd> nguồn ~ / .bash_profile hoặc mở một thiết bị đầu cuối mới

Tôi nghĩ rằng phiên bản jdk có thể khác nhau, vì vậy chỉ cần sử dụng phiên bản mà bạn có trong / Library / Java / JavaVirtualMachines /


1

Nếu bạn cần có nhiều phiên bản JDK trong Mac OS X (Yosemite), có thể hữu ích khi thêm một số tập lệnh để tự động chuyển đổi giữa chúng.

Những gì bạn làm là chỉnh sửa ~ / .bash_profile của bạn và thêm vào như sau:

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
setjdk 1.7

Kịch bản làm gì trước tiên là loại bỏ các phiên bản JDK khác trong PATH để chúng không can thiệp vào phiên bản JDK mới của chúng tôi. Sau đó, nó sử dụng một cách thông minh / usr / libexec / java_home , một lệnh liệt kê các phiên bản JDK đã cài đặt. Đối số -v yêu cầu java_home trả về đường dẫn của JDK với phiên bản được cung cấp, ví dụ 1.7. Chúng tôi cũng cập nhật PATH để trỏ đến thư mục bin của thư mục JAVA_HOME mới tìm thấy . Cuối cùng, chúng ta có thể thực hiện chức năng bằng cách sử dụng

setjdk 1.7

trong đó chọn phiên bản JDK được cài đặt mới nhất của nhánh 1.7. Để chọn một phiên bản cụ thể, bạn chỉ cần thực hiện

setjdk 1.7.0_51

thay thế. Chạy / usr / libexec / java_home -V để biết thêm chi tiết về cách chọn phiên bản.

PS Đừng quên nguồn ~ / .bash_profile sau khi bạn lưu nó.


1

Đối với Java 11 (JDK 11), nó có thể được định vị bằng lệnh sau:

/usr/libexec/java_home -v 11

0

Câu trả lời này có liên quan đến Sư tử núi chứ không phải Sư tử. Tôi cần phải làm điều này cho Công cụ dòng lệnh AWS. Theo tài liệu AWS , chạy which javatrả về/usr/bin/java .

Vì vậy, tôi đặt JAVA_HOME=/usrtrong.bashrc .

Rõ ràng, /usr/bin/javalà một liên kết tượng trưng để /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javalàm cho tất cả hoạt động.

Cập nhật

Như đã đề cập trong bình luận bên dưới, JAVA_HOMEgiá trị này không phải là một giải pháp lý tưởng khi JAVA_HOMEbiến môi trường được sử dụng bởi những thứ khác ngoài Công cụ dòng lệnh AWS. Tuy nhiên, nó hoạt động tốt đối với Công cụ dòng lệnh AWS, như được đưa ra trong tài liệu của họ.


vấn đề là, / usr không phải là thư mục JAVA_HOME chính xác. Bạn có thể xác định vị trí bin / java. Nhưng đôi khi các nhà xây dựng (ant, make) sử dụng JAVA_HOME để tham chiếu trình biên dịch javac trong lib / tools.jar Giải pháp của bạn sẽ thất bại đối với những người đó
Olivier Refalo

À, cảm ơn vì thông tin. Bạn đúng rồi. Sẽ cập nhật câu trả lời.
Anjan

0

Đối với Mac Yosemite,

JDK 1.7.0_xx đang sử dụng

$ ls -ltar /usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home

Bạn có thể vui lòng thêm thông tin để làm cho câu trả lời này hữu ích.
Mika

0

Bất cứ ai sử dụng AUSKEY từ Cơ quan Thuế Úc (ATO) nên gỡ cài đặt AUSKEY. Điều này đã sắp xếp các vấn đề JAVA_HOME của tôi.

Nó cũng không còn cần thiết cho người dùng MAC. Yah!


0

Tôi đang sử dụng Fish shell trên High Sierra 10.13.4 và đã cài đặt Java thông qua Brew.

Nó không tự động được thiết lập để thiết lập chính xác trên hệ thống của tôi, tôi chạy:

set -U JAVA_HOME (/usr/libexec/java_home)

0

Chỉ cần đặt java_home của phiên bản 1.8 jdk trong netbeans.conftệp:

/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf

dòng không ghi chú:

netbeans_jdkhome="path/to/jdk"

và đặt đường dẫn đến 1,8 jdk của bạn, trong trường hợp của tôi:

netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

Cách tiếp cận này cho phép bạn có một số phiên bản jdk trên mac os


0

Đối với người dùng thiết bị đầu cuối Fish trên Mac (tôi tin rằng nó cũng có sẵn trên Linux), điều này sẽ hoạt động:

set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
set -Ux JAVA_HOME $JAVA_8       //or whichever version you want as default

-1

cho người dùng mac. java 8 nên thêm

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

java 6:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

tham chiếu: http://qiita.com/seri_k/items/e978c1339ce51f13e297

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.