Làm cách nào để đặt hoặc thay đổi phiên bản Java (JDK) mặc định trên OS X?

889
Venkat 2014-02-23 19:46.

Làm cách nào bạn có thể thay đổi phiên bản Java mặc định trên máy Mac?

27 answers

1632
markhellewell 2014-07-10 05:23.

Lần chạy đầu tiên /usr/libexec/java_home -Vsẽ xuất ra một cái gì đó như sau:

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

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

Chọn phiên bản bạn muốn làm mặc định ( 1.6.0_65-b14-462vì lợi ích đối số), sau đó:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`

hoặc bạn có thể chỉ định phiên bản chính, như:

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

Bây giờ khi bạn chạy, java -versionbạn sẽ thấy:

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

Thêm export JAVA_HOME…dòng vào tệp init của shell của bạn.

Đối với Bash (như đã nêu bằng từ trái nghĩa ):

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

Đối với cá (như đã nêu bởi ormurin)

set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)

Cập nhật tệp .zshrc sẽ hoạt động:

nano ~/.zshrc

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

Nhấn CTRL + X để thoát khỏi trình chỉnh sửa Nhấn Y để lưu các thay đổi của bạn

source ~/.zshrc
echo $JAVA_HOME
java -version
449
Hugues M. 2017-05-25 12:25.

Câu trả lời này là một nỗ lực nhằm giải quyết: cách kiểm soát phiên bản java trên toàn hệ thống (không chỉ trong trình bao hiện đang chạy) khi một số phiên bản JDK được cài đặt cho mục đích phát triển trên macOS El Capitan hoặc mới hơn (Sierra, High Sierra, Mojave) . Theo như tôi có thể nói, không có câu trả lời hiện tại nào làm được điều đó (*).

Là một nhà phát triển, tôi sử dụng một số JDK và tôi muốn chuyển đổi từ cái này sang cái kia dễ dàng. Thông thường, tôi có một cái ổn định mới nhất để sử dụng chung và những cái khác để thử nghiệm. Nhưng tôi không muốn hệ thống (ví dụ: khi tôi khởi động IDE) sử dụng phiên bản "quyền truy cập sớm" mới nhất mà tôi có hiện tại. Tôi muốn kiểm soát mặc định của hệ thống và điều đó phải ổn định mới nhất.

Cách tiếp cận sau ít nhất hoạt động với Java 7 đến 12 (truy cập sớm tại thời điểm viết bài này), với Oracle JDK hoặc OpenJDK (bao gồm các bản dựng của AdoptOpenJDK được sản xuất sau giữa tháng 10 năm 2018 ).

Giải pháp không có công cụ của bên thứ 3:

  • để tất cả các JDK ở vị trí mặc định của chúng, bên dưới /Library/Java/JavaVirtualMachines. Hệ thống sẽ chọn phiên bản cao nhất theo mặc định.
  • Để loại trừ JDK không được chọn theo mặc định, hãy đổi tên nó Contents/Info.plistthànhInfo.plist.disabled . JDK đó vẫn có thể được sử dụng khi $JAVA_HOMEtrỏ đến nó hoặc được tham chiếu rõ ràng trong một tập lệnh hoặc cấu hình. Nó chỉ đơn giản là sẽ bị bỏ qua bởi javalệnh của hệ thống .

Trình khởi chạy hệ thống sẽ sử dụng JDK với phiên bản cao nhất trong số những ứng dụng có Info.plisttệp.

Khi làm việc trong một trình bao với JDK thay thế, hãy chọn phương pháp của bạn trong số các câu trả lời hiện có ( jenvhoặc bí danh / tập lệnh tùy chỉnh xung quanh /usr/libexec/java_home, v.v.).


Chi tiết của cuộc điều tra trong ý chính này .


(*) Các câu trả lời hiện tại hoặc đã lỗi thời (không còn hợp lệ cho macOS El Capitan hoặc Sierra) hoặc chỉ giải quyết một JDK duy nhất hoặc không giải quyết khía cạnh toàn hệ thống. Nhiều người giải thích cách thay đổi $JAVA_HOME, nhưng điều này chỉ ảnh hưởng đến shell hiện tại và những gì được khởi chạy từ đó. Nó sẽ không ảnh hưởng đến ứng dụng được khởi chạy từ trình khởi chạy hệ điều hành (trừ khi bạn thay đổi đúng tệp và đăng xuất / đăng nhập, điều này thật tẻ nhạt). Tương tự đối với jenv, nó tuyệt vời và tất cả, nhưng theo như tôi có thể nói nó chỉ thay đổi các biến môi trường, vì vậy nó có cùng một hạn chế.

279
Justin Zhang 2016-11-23 15:57.

Thêm vào các câu trả lời ở trên, tôi đặt các dòng sau vào .bash_profile(hoặc .zshrccho MacOS 10.15+) của tôi, điều này làm cho việc chuyển đổi thực sự thuận tiện (bao gồm cả nhận xét của @ elektromin cho java 9):

alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"

Sau khi chèn, thực thi $ source .bash_profile

Tôi có thể chuyển sang Java 8 bằng cách nhập như sau:

$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
55
kenglxn 2015-06-17 08:51.

Một hàm cá nhỏ dựa trên / usr / libexec / java_home

function jhome
    set JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

Nếu bạn không sử dụng cá, bạn có thể làm điều gì đó tương tự trong bash:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home [email protected]`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

Sau đó, để chuyển đổi giữa các jav, hãy làm:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

ref: https://gist.github.com/kenglxn/1843d552dff4d4233271

35
Yuantao 2015-05-29 18:38.

Sử dụng jenv là một cách dễ dàng.

1. cài đặt jenv

curl -s get.jenv.io | bash

2.Config jenv

cd ~/.jenv/candidates/
mkdir java
cd java
mkdir 1.7
mkdir 1.8

3.Symlink đường dẫn jdk

ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8

4. bạn đã sẵn sàng

chuyển lệnh:

jenv sử dụng java 1.8

đặt mặc định:

jenv mặc định java 1.7

33
Trein 2014-02-23 19:49.

Nó hơi phức tạp một chút, nhưng hãy thử làm theo các bước được mô tả trong Cài đặt Java trên OS X 10.9 (Mavericks) . Về cơ bản, bạn sẽ phải cập nhật bí danh của mình lên java.

Từng bước một:

Sau khi cài đặt JDK 1.7, bạn sẽ cần thực hiện sudo ln -snfđể thay đổi liên kết thành hiện tại java. Để làm như vậy, hãy mở Terminal và ra lệnh:

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

Lưu ý rằng thư mục jdk1.7.0_51.jdkcó thể thay đổi tùy thuộc vào phiên bản SDK bạn đã cài đặt.

Bây giờ, bạn cần thiết lập JAVA_HOMEđể trỏ đến nơi jdk_1.7.0_xx.jdkđã được cài đặt. Mở lại Terminal và nhập:

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

Bạn có thể thêm export JAVA_HOMEdòng ở trên vào .bashrctệp của mình để có java vĩnh viễn trong Terminal của bạn

28
user2708060 2016-11-01 03:02.

cài đặt JDK, không chỉ JRE

/usr/libexec/java_home -v 1.8

cho

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

kế tiếp

touch .bash_profile

open -a TextEdit.app .bash_profile

TextEdit sẽ hiển thị cho bạn một trang trống mà bạn có thể điền vào.

thêm vào tài liệu: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

trong thiết bị đầu cuối:

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

thử lệnh:

javac -version

nên xuất:

javac 1.8.0_111
27
dustinevan 2017-10-04 08:22.

tl; dr

Thêm dòng:

export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

vào tập tin

~/.bash_profile

(thay thế jdk1.8.0_144.jdk bằng phiên bản đã tải xuống của bạn)

sau đó source ~/.bash_profile

24
slal 2017-05-11 08:58.

Sử dụng jenv, nó giống như một trình quản lý môi trường Java. Nó rất dễ sử dụng và làm sạch

Đối với Mac, hãy làm theo các bước:

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

Cài đặt: Nếu bạn đang sử dụng bash, hãy làm theo các bước sau:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $SHELL -l

Thêm các phiên bản JVM mong muốn vào jenv:

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

jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

Kiểm tra các phiên bản đã cài đặt:

jenv versions

Đặt phiên bản Java bạn muốn sử dụng bằng cách:

jenv global oracle64-1.6.0
12
Gabriel Reiser 2017-04-07 11:45.
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
}

đặt này trong thư mục ~ / .profile và sử dụng nó trong thiết bị đầu cuối của bạn như vậy setjdk 1.8, setjdk 1.7, setjdk 9etc etc ...

Nếu bạn không có removeFromPaththì đó là:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

12
Abbin Varghese 2019-09-13 22:19.

Bốn bước đơn giản bằng cách sử dụng thiết bị đầu cuối cho những người sử dụng quy trình mặc định .. :)

  1. echo $JAVA_HOMEcung cấp cho bạn trang chủ java hiện tại. Ví dụ:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

  2. cd /Library/Java/JavaVirtualMachines/ sẽ đưa bạn đến thư mục mà bạn thường cài đặt jdks (Nó có thể khác đối với máy của bạn)

  3. lshiển thị cho bạn các thư mục có sẵn (thông thường nó sẽ có số phiên bản, ví dụ jdk1.8.0_191.jdk openjdk-11.0.2.jdk:)
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' sẽ thay đổi nhà java ..
9
xsilen T 2019-03-29 02:36.

thêm lệnh sau vào ~/.zshenvtệp

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 
9
Joaquín L. Robles 2019-10-24 07:09.

macOS El Capitan hoặc mới hơn sẽ chọn phiên bản JDK cao hơn có sẵn /Library/Java/JavaVirtualMachines, vì vậy để hạ cấp, bạn có thể đổi tên tệp Info.plistthành một cái gì đó khác giống như Info.plist.disabledvậy để hệ điều hành chọn phiên bản trước đó.

8
Amin Agha 2020-03-05 10:12.

Bạn có thể thêm nó vào .bash_profile của mình để đặt phiên bản theo mặc định.

//Open bash profile
open ~/.bash_profile

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

// run bash profile
source ~/.bash_profile
6
Antonio 2014-11-19 03:39.

Từ trang người dùng java_home (1) chính thức của Apple :

**USAGE**

   /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export JAVA_HOME=`/usr/libexec/java_home`

   Usage for csh-style shells:
          % setenv JAVA_HOME `/usr/libexec/java_home`
6
Rohit Kumar 2018-09-27 18:32.

Nếu bạn vẫn không thể thiết lập nó. bằng lệnh này.

xuất JAVA_HOME =/usr/libexec/java_home -v 1.8

thì bạn phải sử dụng cái này.

xuất JAVA_HOME =$(/usr/libexec/java_home -v 1.8)

nó chắc chắn sẽ hoạt động.

6
Vrushali Raut 2018-09-30 06:59.

Trước tiên, hãy tìm nơi bạn lưu trữ các biến môi trường-

  1. emacs
  2. bash_profile
  3. tệp zshrc

Các bước để thiết lập biến môi trường: -

  1. Tải xuống jdk từ JAVA

  2. cài đặt nó bằng cách nhấp đúp

  3. Bây giờ hãy thiết lập các biến môi trường trong tệp của bạn

    a. Đối với emacs.profile, bạn có thể sử dụng liên kết này HOẶC xem ảnh chụp màn hình bên dưới

b. Để thiết lập hồ sơ ZSH -

1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

2. source ~/.zshrc - Restart zshrc to reflect the changes.

3. echo $JAVA_HOME - make sure path is set up properly 
   ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

4. java -version 

   -->  java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)

Đã sẵn sàng Giờ bạn có thể dễ dàng nâng cấp hoặc hạ cấp phiên bản JAVA ..

5
Marcello de Sales 2017-12-04 20:54.

Tập lệnh chuyển đổi JDK

Tôi đã điều chỉnh câu trả lời từ @Alex ở trên và viết phần sau để sửa mã cho Java 9.

$ cat ~/.jdk
#!/bin/bash

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
  echo "Switching java version $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export JAVA_HOME=$(/usr/libexec/java_home -v $1);
  else
    export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
  fi

  echo "Setting JAVA_HOME=$JAVA_HOME"

  which java
  java -version;
}

Chuyển sang Java 8

$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Chuyển sang Java 9

$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
5
feistyfawn 2020-10-24 01:57.
  1. Thêm dòng mã sau vào .zshrc (hoặc bash_profile ) của bạn:

bí danh j = 'f () {xuất JAVA_HOME = /usr/libexec/java_home -v $1}; f'

  1. Lưu vào phiên:

$ nguồn .zshrc

  1. Chạy lệnh (ví dụ: j 13, j14, j1.8 ...)

$ j 1,8

Giải thích Điều này được tham số hóa nên bạn không cần cập nhật tập lệnh như các giải pháp khác đã đăng. Nếu bạn chưa cài đặt JVM, bạn sẽ được thông báo. Các trường hợp mẫu bên dưới:

/Users/user/IDE/project $ j 1.8
/Users/user/IDE/project $ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)
/Users/user/IDE/project $ j 13
/Users/user/IDE/project $ java -version
openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
/Users/user/IDE/project $ j 1.7
Unable to find any JVMs matching version "1.7".
4
Gob00st 2018-02-15 01:44.

Nếu bạn đang sử dụng fish và bạn đang sử dụng mac và bạn muốn có thể chuyển đổi giữa các JDK, thì bên dưới phù hợp với tôi trên mac.

Câu trả lời của @ kenglxn không phù hợp với tôi và tôi đã phát hiện ra rằng bcos không đặt -g là toàn cầu!

Đặt bên dưới ~ / .config / fish / config.fish

alias j8="jhome  -v 1.8.0_162"
alias j9="jhome  -v 9.0.1"

function jhome
    set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

funcsave jhome

Để biết bạn đã cài đặt phiên bản / phiên bản nhỏ nào, bạn có thể làm:

/usr/libexec/java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
3
MonstroDev 2015-02-04 00:29.

Nếu bạn có nhiều phiên bản và bạn muốn chạy thứ gì đó bằng cách sử dụng một phiên bản cụ thể, hãy sử dụng ví dụ sau:

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
2
Alex 2017-03-09 05:55.

Dựa trên câu trả lời @markhellewell, tôi đã tạo một vài hàm bí danh sẽ làm điều đó cho bạn. Chỉ cần thêm chúng vào tệp khởi động shell của bạn

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() { 
  echo "Switching java version"; 
  export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`; 
  java -version; 
}

https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

2
Eric Wang 2018-12-10 01:41.

Đây là cách tôi thực hiện trên Linux (Ubuntu / Mint mate) , tôi đoán Mac cũng có thể làm điều đó tương tự.


Cài đặt và cấu hình

Các bước:

  • [Cơ bản - phần]
  • Tải xuống jdk ( tệp .tgz ) bằng tay.
  • Giải nén và đổi tên đúng cách, ở vị trí thích hợp.
    ví dụ /mnt/star/program/java/jdk-1.8
  • Tạo một liên kết mềm, liên kết này sẽ được thay đổi để chuyển đổi phiên bản java sau này.
    Ví dụ như ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
    vậy /mnt/star/program/java/javalà liên kết mềm.
  • Đặt JAVA_HOMEtrong một kịch bản bắt đầu.
    Có thể sử dụng tệp thích /etc/profile.d/eric.sh, hoặc chỉ sử dụng ~/.bashrc.
    ví dụJAVA_HOME=/mnt/star/program/java/java
  • Sau đó, mở một trình bao bash mới. java -versionnên in phiên bản java.
  • [Phiên bản khác - phần]
  • Tải xuống và cài đặt thêm phiên bản Java nếu cần, tương tự như các bước trên.
    ví dụ
    /mnt/star/program/java/jdk-11
  • [Chuyển đổi - một phần]
  • Trong ~/.bashrc, xác định biến cho các phiên bản Java khác nhau.
    ví dụ
    _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
    _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
    # dir of default version,
    _E_JAVA_HOME_D=$_E_JAVA_HOME_8
  • Trong ~/.bashrc, xác định lệnh để chuyển phiên bản Java.
    ví dụ
    ## switch java version,
    alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
    alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
    # default java version,
    alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
    alias jv="java -version"
  • Trong thiết bị đầu cuối, source ~/.bashrcđể các thay đổi có hiệu lực.
  • Sau đó, có thể chuyển đổi bằng các lệnh đã xác định.

Lệnh - từ cấu hình trên

Lệnh:

  • jv11
    Chuyển sang Java 11
  • jv8
    Chuyển sang Java 8
  • jvd
    Chuyển sang phiên bản Java mặc định, được ký hiệu theo _E_JAVA_HOME_Dđịnh nghĩa ở trên.
  • jv
    Hiển thị phiên bản java.

Ví dụ đầu ra:

[email protected]:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

[email protected]:~$ jv11
[email protected]:~$ jv
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)

[email protected]:~$ jvd
[email protected]:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

[email protected]:~$ 

Cơ chế

  • Nó chuyển đổi bằng cách thay đổi liên kết mềm, được sử dụng như JAVA_HOME.

Lời khuyên

  • Trên máy của tôi khi cài jdk bằng tay, tôi giữ phiên bản nhỏ, sau đó tạo liên kết mềm với phiên bản chính nhưng không có phiên bản phụ.
    ví dụ
    // đây là dir thực,
    jdk1.8.0_191

    // đây là một liên kết mềm tới jdk1.8.0_191
    jdk-8

    // đây là một liên kết mềm đến jdk-8hoặcjdk-11
    java

  • Tôi xác định bí danh lệnh trong ~/.bashrc, nhưng xác định biến trong một tệp riêng biệt.
    Tôi đang sử dụng ~/.eric_varđể xác định các biến, và ~/.bashrcsẽ nguồn nó (ví dụ source $HOME/.eric_var).

2
friederbluemle 2019-01-15 02:47.

Một cách dễ dàng để bao gồm một JDK được cài đặt riêng trong danh sách được đưa ra /usr/libexec/java_home -Vlà liên kết biểu tượng thư mục như sau:

sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

Ví dụ: để đăng ký JDK đi kèm với Android Studio (1.8.0_152 tại thời điểm viết bài), hãy sử dụng:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk

Bây giờ java_homesẽ liệt kê JDK bên dưới Matching Java Virtual Machinesvà bạn có thể chọn nó như mô tả ở trên.

2
joensson 2020-08-12 23:16.

Trước đây tôi sử dụng bí danh trong .zshrc để dễ dàng chuyển đổi giữa các phiên bản nhưng hôm nay tôi sử dụng SDKMAN. SDKMAN cũng có thể xử lý việc thiết lập java mặc định cho hệ thống cũng như tải xuống và cài đặt các phiên bản java mới.

Sau khi sdkman được cài đặt, bạn có thể thực hiện các lệnh tương tự như những gì có thể với công cụ nvm để xử lý các phiên bản nút.

sdk list javasẽ liệt kê các phiên bản java có sẵn trên hệ thống của bạn cũng như có sẵn trên mạng để cài đặt bao gồm nhận dạng của họ mà bạn có thể sử dụng trong sdk use, sdk defaultsdk installlệnh.

Ví dụ: để cài đặt Amazon Corretto 11.0.8 và hỏi xem nó có phải là mặc định mới hay không, hãy làm như sau: sdk install java 11.0.8-amzn

Một tính năng tôi cũng sử dụng thường xuyên là .sdkmanrctệp. Nếu bạn đặt nó trong một thư mục trên máy của mình và chạy sdk envlệnh trong thư mục đó thì bạn có thể định cấu hình các phiên bản công cụ chỉ được sử dụng trong thư mục đó. Cũng có thể tự động tạo các phiên bản công cụ chuyển đổi sdkman bằng cách sử dụng sdkman_auto_env=truecấu hình.

sdkman cũng hỗ trợ xử lý các công cụ khác cho JVM như gradle, kotlin, maven và hơn thế nữa.

Để biết thêm thông tin, hãy xem https://sdkman.io/usage#env

1
Trackhe 2020-04-09 04:48.

Tôi đã làm điều đó cho nhà ga địa phương với

export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)

alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'

export JAVA_HOME=$JAVA_13_HOME
0
Hendrik Ebbers 2014-10-13 23:14.

Công cụ này sẽ thực hiện công việc cho bạn:

http://www.guigarage.com/2013/02/change-java-version-on-mac-os/

Đó là một JavaOne đơn giản có thể được sử dụng để xác định Phiên bản Java hiện tại. Phiên bản có thể được sử dụng trong một trình bao được mở sau khi một phiên bản được chọn trong công cụ.

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

BoJack Horseman vẫn gan ruột và gan dạ hơn bao giờ hết trong phần 3

BoJack Horseman vẫn gan ruột và gan dạ hơn bao giờ hết trong phần 3

BoJack Horseman (Ảnh: Netflix) BoJack Horseman bắt đầu mùa thứ ba với sự xuất hiện của nhân vật tiêu biểu, người vẫn đang theo đuổi những lời khen ngợi từ giới phê bình trong một nỗ lực tuyệt vọng để tìm ra ý nghĩa trong cuộc sống của mình. Mùa thứ hai về số phận bi kịch của Raphael Bob-Waksberg dày đặc những trò đùa cũng như tuyệt vọng.

Xem cách tính năng lái tự động cập nhật của Tesla bùng phát như thế nào khi bạn bỏ qua các cảnh báo của nó

Xem cách tính năng lái tự động cập nhật của Tesla bùng phát như thế nào khi bạn bỏ qua các cảnh báo của nó

Bản nâng cấp Phiên bản 8.0 gần đây của Tesla đối với hệ thống Lái xe tự động được thiết kế để cải thiện hệ thống và mối quan hệ của nó với người lái.

UnREAL, Chương trình Truyền hình Về Truyền hình Thực tế Chúng tôi Không biết Chúng tôi Cần

UnREAL, Chương trình Truyền hình Về Truyền hình Thực tế Chúng tôi Không biết Chúng tôi Cần

Chắc chắn khi con cái chúng ta xem lại các chương trình chúng ta đã xem vào khoảng năm 2015, chúng sẽ thấy UnREAL, một chương trình truyền hình mới chiếu vào tối Thứ Hai của Lifetime — bạn sẽ thấy đúng lúc, sẽ phát sóng ngay sau khi The Bachelor kết thúc — như một chương trình không thể được thực hiện vào bất kỳ thời điểm nào khác trong lịch sử truyền hình, nhưng một chương trình cảm thấy cần thiết để xem bây giờ. UnREAL có sự tham gia của Shiri Appleby trong vai Rachel, một nhà sản xuất truyền hình cho một chương trình về cơ bản là The Bachelor, mặc dù trong thế giới này, nó được gọi là Vĩnh viễn.

Sau tất cả, Josh Trank sẽ không đạo diễn bộ phim tuyển tập Star Wars thứ hai

Sau tất cả, Josh Trank sẽ không đạo diễn bộ phim tuyển tập Star Wars thứ hai

Thông báo chính thức đến trực tiếp từ trang web của Star Wars: Fantastic Four, đạo diễn Josh Trank, một người bí ẩn không xuất hiện tại đại hội Star Wars Celebration gần đây, sẽ không chỉ đạo phần hai Star Wars Anthology. Đây là tuyên bố được đăng ngày hôm qua: Tất cả thực sự là ngôn ngữ rất lịch sự, nhưng một bài báo của Hollywood Reporter cho thấy tất cả đều không tốt ở hậu trường, gọi sự ra đi là "một vụ sa thải" một phần dựa trên "hành vi bất thường" của Trank trong khi quay Fantastic Four: The Bài báo trích dẫn các nguồn gọi là Trank “đôi khi thiếu quyết đoán và thiếu sáng tạo,” và lưu ý rằng Fantastic Four, khởi chiếu vào ngày 7 tháng 8, đã được khởi động lại vào cuối tháng 4.

Edwin McCain ra mắt Grand Ole Opry: Quay cảnh hậu trường với nhạc sĩ 'I'll Be'

Edwin McCain ra mắt Grand Ole Opry: Quay cảnh hậu trường với nhạc sĩ 'I'll Be'

McCain, người đang làm việc cho một album mới, lần đầu tiên bước vào vòng kết nối vào tối thứ Sáu ở Nashville

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Tôi viết như thế nào

Tôi viết như thế nào

Đối với tôi, mọi thứ là về dòng đầu tiên đó và nó sẽ đưa bạn đến đâu. Một số nhà văn bị điều khiển bởi cốt truyện, sự sắp xếp tinh tế của các quân cờ, trong khi những người khác bị lôi cuốn bởi một nhân vật và khả năng thực hiện một cuộc hành trình với một người bạn hư cấu mới.

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Language