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


780

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


2
thực thi /usr/libexec/java_homenói gì với bạn?
Bart

2
/ usr / libexec / JAVA_HOME trả /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Venkat

Có thể bạn chỉ cần khởi động lại. Bạn đã thử chưa?
Bart

Yep khởi động lại máy tính và thiết bị đầu cuối ... không thay đổi.
Venkat

3
Bạn có thể vui lòng chấp nhận câu trả lời được bình chọn cao từ @markhellewell bên dưới không? Nó sẽ giúp tôi tìm thấy nó nhanh hơn một chút, và nó thật tuyệt. :)
Taytay

Câu trả lời:


1410

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 của đố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 tin init của shell của bạn.

Đối với Bash (như đã nêu của antonyh ):

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

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

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

2
@ MattO'Brien đó là thứ gì đó phụ thuộc vào lớp vỏ bạn đang sử dụng và cấu hình bạn có, vì vậy tôi không thể đưa ra giải pháp hoàn chỉnh cho trò đó
markhellewell

11
những người thực sự là backticks exportdòng
David West

6
Điều này đã không làm việc cho tôi. Lấy đường dẫn từ chạy java_home -V và thêm lệnh này vào lệnh xuất, như xuất này JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Nội dung / Trang chủ"
oden

68
Điều này hoạt động trong Bash - export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)- cũng lưu ý, java_home cho phép khớp một phần để bạn không phải bao gồm phiên bản đầy đủ vì nó sẽ tìm thấy bản cài đặt mới nhất. Điều này làm cho việc cập nhật dễ dàng hơn.
antonyh

14
Hãy chắc chắn rằng bạn đang sử dụng `` not '' để xuất.
bão tuyết

409

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 shell 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 khác một cách 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ụ như khi tôi khởi động IDE) sử dụng phiên bản "truy cập sớm" mới nhất mà tôi có bây giờ. 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 đây hoạt động với Java 7 đến 12 ít nhất (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:

  • để lại tất cả các JDK tại 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ỏi bị chọn theo mặc định, đổi tê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ó đơn giản 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 Info.plisttệp có tệp.

Khi làm việc trong một trình bao với JDK thay thế, hãy chọn phương thức 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 điều tra trong ý chính này .


(*) Các câu trả lời hiện tại đã lỗi thời (không còn giá trị đối với 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 lớp vỏ hiện tại và những gì được đưa ra từ đó. Nó sẽ không ảnh hưởng đến một ứng dụng được khởi động 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ó rất tuyệt 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 giới hạn.


16
Đây là câu trả lời tôi đang tìm kiếm, vì jenvcũng không JAVA_HOMEthể thiết lập phiên bản java toàn hệ thống, tức là một Eclipse sẽ sử dụng.
Giovanni Lovato

3
@Rodrigo Có, như đã đề cập trong "Chi tiết điều tra" (được liên kết ở trên): "Cài đặt JDK cũng ghi đè /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/. Rõ ràng đây là cái mà ngăn Tùy chọn mới sẽ khởi chạy - đây là ngoại lệ duy nhất tôi tìm thấy cho giải pháp của mình: đó là thingy vẫn sẽ sử dụng JDK9 (tôi đã cài đặt mới nhất), nhưng không có ứng dụng Java nào khác. "
Hugues M.

2
Đáng lưu ý rằng các phiên bản java được tìm thấy trong / Library / Java / JavaVirtualMachines và giải pháp làm việc tuyệt vời ở trên nằm trong bối cảnh đó.
Andrew Kostka

3
Chính xác, đây là giải pháp tốt nhất và chức năng nhất cho câu hỏi này. Thật không may là như vậy.
Aerodynamika

3
Tôi không thể cảm ơn bạn đủ cho câu trả lời này. Điều này cố định khởi chạy các ứng dụng từ trình khởi chạy hệ điều hành.
Karthic Raghupathi

248

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+) để giúp 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 hiện $ source .bash_profile

Tôi có thể chuyển sang Java 8 bằng cách gõ 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)

5
Đây là cú pháp cho Java 9: alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
elektromin

3
Bí danh đơn giản tuyệt vời để chuyển đổi nhanh chóng.
gbonetti

Sử dụng alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"và sau đó nhập j10cho phép bạn quay lại phiên bản Java hiện tại (trong trường hợp của tôi là Java 10)
intagli

Tôi sẽ tạo một công cụ cli tương tự như để nvmchuyển đổi các phiên bản Java, nhưng từ viết tắt jvmđã có nghĩa gì đó khác :)
Andy

Tôi gặp lỗi này khi tìm nguồn cung ứng: /Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
cosbor11

56

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 $@`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

Sau đó, để chuyển đổi giữa các javas 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

tham chiếu: https://gist.github.com/kenglxn/1843d552dff4d4233271


1
điều này chỉ thay đổi cho phiên thiết bị đầu cuối cụ thể. Có cách nào để cập nhật điều này để thay đổi hệ thống không?
ANH618

1
Tôi đã phải viết export JAVA_HOME=(/usr/libexec/java_home $argv)thay vì dòng thứ hai của jhomechức năng của bạn .
Daniel AA Pelsmaeker

32

Hơi khó 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 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 đặt JAVA_HOMEđể trỏ đến nơi jdk_1.7.0_xx.jdkđã được cài đặt. Mở lại Terminal và gõ:

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 trong .bashrctệp của mình để có java vĩnh viễn trong Terminal của bạn


1
Làm cách nào để đặt Biến JAVA_HOME? Có một nơi cụ thể tôi đặt nó ở?
Venkat

Tôi đang xuất JAVA_HOME ở đâu? và nơi đó sẽ được cứu?
Venkat

1
Tôi đã cập nhật câu trả lời. Bạn có biết phiên bản SDK mà bạn đã cài đặt không? Tên thư mục lấy số phiên bản SDK, vì vậy các lệnh trên có thể thay đổi một chút.
Trein

Tôi đã cài đặt cái mới nhất, tôi nghĩ nó là 51.
Venkat

Biến JAVA_HOMEsẽ được xuất trên phiên Terminal hiện tại. Bạn có thể thêm nó vào của chúng tôi .bashrcnếu bạn muốn. Tôi sẽ điều chỉnh các lệnh cho phiên bản cuối cùng.
Trein

32

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

1. cài đặt

    curl -s get.jenv.io | bash

2.Config jenv

    cd ~ / .jenv / thí sinh /
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8

3. Liên kết đường dẫn jdk

    ln -s / Thư viện / Java / JavaVirtualMachines / jdk1.7.0_79.jdk / Content / Home / bin ~ / .jenv / ứng cử viên / java / 1.7
    ln -s / Thư viện / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Content / Home / bin ~ / .jenv / ứng cử viên / java / 1.8

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

lệnh chuyển đổi:

jenv sử dụng java 1.8

đặt mặc định:

jenv mặc định java 1.7


Giải pháp sạch đẹp.
pinturic

Thay vì "jenv sử dụng java 1.8", tôi đã phải sử dụng "jenv shell 1.8". "Vỏ" cũng có thể là "toàn cầu" hoặc "cục bộ" tùy theo nhu cầu.
Steve Gelman

1
jenv là tốt đẹp khi nó hoạt động. Mặc dù vậy, chúng tôi khuyên bạn nên chống lại nó, vì nó không "thực sự" thay đổi phiên bản java mặc định được sử dụng, hiển nhiên bằng cách chạy lệnh "/ usr / libexec / java_home -V", chỉ JAVA_HOME. Điều này gây ra vấn đề kỳ lạ với một số ứng dụng, ví dụ như Eclipse.
simon

Bên cạnh đó, phần hoang tưởng trong tôi đề nghị chống lại bất cứ điều gì để bash. Ngay cả khi bạn nghĩ rằng trang web đáng tin cậy thì không ai có thể đảm bảo cho bạn rằng nó không thể hack được. Sử dụng trình quản lý gói hệ điều hành của bạn.
Alexanderr Kravets

Thông tin đó đã lỗi thời. Kiểm tra tài liệu chính thức hoặc hướng dẫn chi tiết hơn .
fabianopinto

28

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

26

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


22

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 theo:

jenv global oracle64-1.6.0

Điều này làm việc hoàn hảo cho tôi, cảm ơn!
Fernando Gabrieli

Tôi đang sử dụng một công cụ tương tự: sdkman.io/usage - IMHO cách tiếp cận tốt hơn nhiều so với bí danh thủ công, v.v.
SathOkh

12
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

Bốn bước dễ dàng 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 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 nơi bạn thường cài đặt jdks (Nó có thể khác với các 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 ..

8

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

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

8

macOS El Capitan hoặc mới hơn sẽ chọn phiên bản cao hơn của JDK 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 Info.plist.disabledđể HĐH sẽ chọn phiên bản trước.


Cách dễ nhất để (: Cảm ơn
Seditesh Srinivasan

6

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

Nếu vẫn không thể thiết lập nó. sử dụng lệnh này.

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

sau đó 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ẽ làm việc


6

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 tin 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ờ 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

nhập mô tả hình ảnh ở đây

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)

Tất cả đã được cài đặt Bây giờ bạn có thể dễ dàng nâng cấp hoặc xuống cấp phiên bản JAVA ..


5

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 như 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)

4

Bạn có thể thêm nó vào .bash_profile để đặ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

Cảm ơn! Những điều cần lưu ý, bạn phải bao gồm các dấu `. và rõ ràng, thay thế 1.8 bằng bất kỳ phiên bản nào bạn có thể cần. Trong trường hợp của tôi 13.0.2
Jamie S

3

Nếu bạn đang sử dụng cá 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 hoạt động với tôi trên mac.

Câu trả lời của @ kenglxn không hiệu quả 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 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 phiên bản / phiên bản nhỏ nào bạn đã cài đặt, 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

2

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

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar

2

Dựa trên câu trả lời @markhellewell tôi đã tạo ra 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 tin 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

Đây là cách tôi làm điều đó trên Linux (Ubuntu / Mint mate) , tôi đoán Mac 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, tại một 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, 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 tin như /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 vỏ 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, khi 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 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 đổi 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để thực hiện các thay đổi có hiệu lực.
  • Sau đó có thể chuyển đổi bằng cách sử dụng các lệnh được xác định.

Các lệnh - từ cấu hình trên

Các 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 biểu thị bằng _E_JAVA_HOME_Dđịnh nghĩa ở trên.
  • jv
    Hiển thị phiên bản java.

Ví dụ đầu ra:

eric@eric-pc:~$ 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)

eric@eric-pc:~$ jv11
eric@eric-pc:~$ 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)

eric@eric-pc:~$ jvd
eric@eric-pc:~$ 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)

eric@eric-pc:~$ 

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 đặt 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à thư mục thực tế,
    jdk1.8.0_191

    // đây là một liên kết mềm đến 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.
    Tôi đang sử dụng ~/.eric_varđể xác định các biến và ~/.bashrcsẽ lấy nguồn đó (ví dụ source $HOME/.eric_var).


1

Một cách dễ dàng để bao gồm một JDK được cài đặt riêng trong danh sách được cung cấp bởi /usr/libexec/java_home -Vlà liên kết symlink 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), 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ư được mô tả ở trên.


1

Tôi đã thực hiện nó cho các thiết bị đầu cuối đị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


-6

GIẢI PHÁP DỄ DÀNG: Thật đau đầu - đây là một giải pháp dễ dàng nhanh chóng hiệu quả với tôi.

Mac OS Sierra Phiên bản 10.12.13

  1. Sử dụng các phím tắt: CMD + SHIFT + G - nhập "/ Library /"

  2. Tìm thư mục JAVA

  3. Nhấp chuột phải vào Thư mục Java = Di chuyển đến Thùng rác (Yêu cầu mật khẩu)

  4. Cài đặt: Bộ phát triển Java SE 8 jdk-8u131-macosx-x64.dmg | Tải xuống SDK Javascript

  5. Đảm bảo thư mục JAVA mới xuất hiện trong / THƯ VIỆN /
  6. Cài đặt Eclipse | Cài đặt IDE Eclipse cho các nhà phát triển Java
  7. Boom xong
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.