Tôi nên đặt biến môi trường JAVA_HOME nào trên macOS X 10.6?


436

Nhiều ứng dụng Java sử dụng các tập lệnh shell để cấu hình môi trường của chúng sử dụng JAVA_HOMEbiến môi trường để bắt đầu phiên bản chính xác của Java, định vị các JAR JAR, v.v.

Trong macOS X 10.6, các đường dẫn sau dường như hợp lệ cho biến này

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

Một số trong số này là các liên kết tượng trưng đến VM hiện tại thực tế (như được định nghĩa trong khung Tùy chọn Java).

Nhưng cái nào nên được sử dụng, hay sử dụng bất cứ thứ gì trong số chúng?


Câu trả lời:


849

Tôi chỉ đặt thành JAVA_HOMEđầu ra của lệnh đó, nó sẽ cung cấp cho bạn đường dẫn Java được chỉ định trong các tùy chọn Java của bạn. Đây là một đoạn trích từ .bashrctệp của tôi , đặt biến này:

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

Tôi chưa gặp vấn đề gì với kỹ thuật đó.

Thỉnh thoảng tôi phải thay đổi giá trị của JAVA_HOMEphiên bản Java trước đó. Ví dụ: một chương trình tôi đang duy trì yêu cầu Java 5 32 bit trên OS X, vì vậy khi sử dụng chương trình đó, tôi đã thiết lập JAVA_HOMEbằng cách chạy:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)

Đối với những người bạn không có java_hometrong đường dẫn của bạn thêm nó như thế này.

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

Tài liệu tham khảo :


20
Sư tử núi cũng có nó
sghill

57
Vẫn hợp lệ cho Mavericks
Pascal

42
Vẫn còn hiệu lực cho Yosemite. ;)
Geoffrey Wiseman

42
El thủ đô. Kiểm tra!
gattshjoty

11
Vẫn còn hiệu lực cho Mojave
Keuha

40

Ngoài ra, thật thú vị khi đặt PATH của bạn để phản ánh JDK. Sau khi thêm JAVA_HOME (có thể được thực hiện với ví dụ được trích dẫn bởi 'mipadi'):

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

Thêm vào trong ~ / .profile:

export PATH=${JAVA_HOME}/bin:$PATH

PS: Đối với OSX, tôi thường sử dụng .profile trong thư mục HOME thay vì .bashrc


Đối với OSX chạy bash mặc định, tôi thường sử dụng bash .bash_profile- tại sao bạn sử dụng hơn chung chung .profile?
LeeGee

1
.profilelà chung chung, nó sẽ làm việc với shhoặc bash, trong khi .bash_profilelà độc quyền bash. Ngoài ra, điều này cô lập các cài đặt từ các ứng dụng sử dụng .bash_profile, như MacPorts. Nhưng bạn có thể sử dụng một cách an toàn bất kỳ trong số hai. Xem thêm về nó ở đây
lucasarruda

1
- FYI, liên kết bạn cung cấp xác nhận sự nghi ngờ của tôi rằng theo bash (tức là theo mặc định), sử dụng .bash_profileghi đè .profile.
LeeGee

@LeeGee có, và nó làm điều đó bởi vì .bash_profilecụ thể, trong khi đó .profilelà chung chung, cho tất cả các shbiến thể.
lucasarruda

1
Vì OS / X đặt một liên kết đến javatrong bạn /usr/binnên không cần phải thêm một cách rõ ràng $JAVA_HOMEvào đường dẫn của bạn.
Zac

20

Tôi đang có MAC OS X (Sierra) 10.12.2 .

Tôi đặt JAVA_HOME để hoạt động trên React Native (dành cho ứng dụng Android) bằng cách làm theo các bước sau.

  • Mở Terminal (Command + R, gõ Terminal, nhấn ENTER).

  • Thêm các dòng sau vào ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Bây giờ chạy lệnh sau. source ~/.bash_profile

  • Bạn có thể kiểm tra giá trị chính xác của JAVA_HOME bằng cách nhập lệnh sau. echo $JAVA_HOME

Giá trị (đầu ra) được trả về sẽ giống như bên dưới. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Đó là nó.


Điều này rất hữu ích, cảm ơn. Nhưng tôi tin rằng bạn đã bỏ lỡ bao gồm bước cuối cùng, sau đó đặt JAVA_HOME thành giá trị được trả về trong .bashrc / .bash_profile / .zshrc / v.v. Vui lòng sửa cho tôi nếu tôi nhầm.
TheProletariat 15/03/18

2
Nó không bắt buộc. Trong trường hợp của tôi, $JAVA_HOMEđề cập $(/usr/libexec/java_home)$(/usr/libexec/java_home) được gọi là nội bộ /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homecủa hệ thống.
hygull

1
Hiểu rồi. Nó được yêu cầu trong trường hợp của tôi. Cảm ơn.
TheProletariat 19/03/18

13

Tôi đang dùng Mac OS 10.6.8

Giải pháp đơn giản nhất cho tôi chỉ đơn giản là đưa vào

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

Để kiểm tra xem nó hoạt động, đưa vào

$ echo $JAVA_HOME

nó cho thấy

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

bạn cũng có thể kiểm tra

$ which java


9

Tôi có xu hướng sử dụng /Library/Java/Home. Cách khung tùy chọn hoạt động này sẽ được cập nhật với phiên bản ưa thích của bạn.


/thùng rác . và kiểm tra xem nó trỏ đến / Library / java chứ không phải / System / Library / .. vì cái đó có thể bị lỗi thời.
JRun

1
Điều này không còn chính xác. Trên OS X 10.5 trở lên, sử dụng / usr / libexec / java_home để tìm đường dẫn.
Kristopher Johnson

8

Điều đó ở trên không hoạt động nữa trong YOSEMITE cho ỨNG DỤNG HÌNH ẢNH! Giống như nhật thực, hoặc bất cứ điều gì bắt đầu với Spotlight. (.bash_profile, launchd.conf chỉ hoạt động cho các phiên cuối.) Trước khi bắt đầu nhật thực, chỉ cần mở một cửa sổ đầu cuối và đưa ra lệnh sau:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(Với đường dẫn cài đặt của bạn! Có lẽ hoạt động với $ (/ usr / libexec / java_home) thay vì đường dẫn đầy đủ.)

Xem toàn bộ bài viết xuất sắc về giải pháp vĩnh viễn tại đây: Đặt biến môi trường qua launchd.conf không còn hoạt động trong OS X Yosemite / El Capitan / macOS Sierra?


2

Tôi đã tìm thấy ngăn xếp này để giúp đỡ, tôi đã gặp vấn đề tương tự và tôi có thể khắc phục:

Đường dẫn java của tôi đã ở đây:

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

và là cần thiết để đưa vào .bash_profile:

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

Mong mọi người giúp đỡ


2

Bỏ qua thiết lập Terminal kể từ khi bạn đề cập đến các ứng dụng, thiết lập biến môi trường hệ thống vĩnh viễn (hoạt động cho macOS Sierra; cũng hoạt động cho El Capitan):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(điều này sẽ đặt JAVA_HOME thành 1.8 JDK mới nhất, rất có thể bạn đã trải qua các bản cập nhật máy chủ, ví dụ như javac 1.8.0_101, javac 1.8.0_131)
Tất nhiên, thay đổi 1.8 thành 1.7 hoặc 1.6 (thực sự?) cho phù hợp với nhu cầu của bạn và hệ thống của bạn


1

Như các câu trả lời khác lưu ý, cách chính xác để tìm thư mục chính Java là sử dụng /usr/libexec/java_home.

Tài liệu chính thức cho vấn đề này là trong Hỏi & Đáp kỹ thuật của Apple QA1170: Các thư mục Java quan trọng trên OS X : https://developer.apple.com/l Library / mac / qa / qa1170 / _index.html


Đây là một bản sao!
Franklin Yu

Tôi nghĩ rằng việc bao gồm các liên kết đến tài liệu chính thức của Apple làm cho nó không dư thừa. Nhưng nếu có, hành động chính xác là gắn cờ nó dưới dạng trùng lặp, không đưa ra nhận xét.
Kristopher Johnson

Tôi đã bình luận vì tôi không thể đánh dấu một câu trả lời là trùng lặp. Stack Overflow chỉ cho phép người dùng đánh dấu một câu hỏi là trùng lặp (không may). Liên kết này rất hữu ích, nhưng tôi nghĩ một nhận xét cho câu trả lời hiện tại (hoặc chỉ chỉnh sửa nó bằng liên kết vì bạn đã có khả năng) sẽ tốt hơn vì nó tập trung tất cả thông tin hữu ích vào một câu trả lời duy nhất. Tôi tin rằng đã có hướng dẫn ở đâu đó rằng Stack Overflow thích sửa các câu trả lời hiện tại hơn là viết một câu trả lời mới.
Franklin Yu

1

Đối với tôi, maven dường như làm việc với các .mavenrctập tin:

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

Tôi chắc chắn tôi cũng đã chọn nó trên SO, chỉ không thể nhớ nơi nào.


1

Tạo tập tin ~/.mavenrc

sau đó dán nó vào tập tin

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

kiểm tra

mvn -v


Tôi thích cách tiếp cận này, vì nó cho phép tôi thay đổi phiên bản Java rất dễ dàng trong tệp .mavenrc.
Spindizzy

1

Bạn nên kiểm tra shell terminal mặc định trước khi đặt biến môi trường JAVA_HOME , thông qua các lệnh sau:

$ echo $SHELL
/bin/bash

Nếu thiết bị đầu cuối mặc định của bạn là / bin / bash (Bash), thì bạn nên sử dụng phương thức @hygull

Nếu thiết bị đầu cuối mặc định của bạn là / bin / zsh (Z Shell), thì bạn nên đặt biến môi trường này trong tệp ~ / .zshenv với nội dung sau:

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

Tương tự, bất kỳ loại thiết bị đầu cuối nào khác không được đề cập ở trên, bạn nên đặt biến môi trường trong tệp env thiết bị đầu cuối tương ứng.

Phương pháp này được thử nghiệm làm việc trong macOS Mojave Phiên bản 10.14.6 .


-1

Đối với người dùng Fish Shell, hãy sử dụng một số thứ như sau: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

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.