Mac OS X và nhiều phiên bản Java


333

Làm cách nào tôi có thể cài đặt java bổ sung trên MacOS? Tôi đã cài đặt jdk8 và nó hoạt động tốt. nhưng bây giờ tôi cần cài đặt jdk7 cho mục đích phát triển. Khi cố gắng cài đặt phiên bản cũ thông qua tệp DMG, tôi nhận được một cảnh báo rằng đã có phiên bản java mới hơn được cài đặt và trình cài đặt thoát.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

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

Làm thế nào để cài đặt jdk7 ngoài cái này?

Cảm ơn
Dakky

Câu trả lời:


493

Cách sạch nhất để quản lý nhiều phiên bản java trên Mac là sử dụng Homebrew.

Và trong Homebrew, sử dụng:

  • homebrew-cask để cài đặt các phiên bản của java
  • jenv để quản lý các phiên bản đã cài đặt của java

Như đã thấy trên http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-mult Môn.html , đây là các bước để làm theo.

  1. cài đặt homebrew
  2. cài đặt jenv homebrew
  3. cài đặt thùng homebrew
  4. cài đặt một phiên bản java cụ thể bằng cách sử dụng thùng (xem đoạn "phiên bản homebrew-thùng" bên dưới)
  5. thêm phiên bản này cho jenv để quản lý nó
  6. kiểm tra phiên bản được quản lý chính xác bởi jenv
  7. lặp lại các bước 4 đến 6 cho mỗi phiên bản java bạn cần

phiên bản thùng nhà

Thêm homebrew/cask-versionsvòi vào homebrew bằng cách sử dụng:

brew tap homebrew/cask-versions

Sau đó, bạn có thể xem tất cả các phiên bản có sẵn:

brew search java

Sau đó, bạn có thể cài đặt (các) phiên bản bạn thích:

brew cask install java7
brew cask install java6

Và thêm chúng để được quản lý bởi jenv như bình thường.

jenv add <javaVersionPathHere>

Tôi nghĩ rằng đây là cách sạch nhất và đơn giản nhất để đi về nó.


Một điều quan trọng khác cần lưu ý, như được đề cập trong Mac OS X 10.6.7 Đường dẫn Java JDK hiện tại khó hiểu :

Đối với các loại JDK hoặc cài đặt khác nhau, bạn sẽ có các đường dẫn khác nhau

Bạn có thể kiểm tra đường dẫn của các phiên bản được cài đặt bằng cách sử dụng /usr/libexec/java_home -V, xem Làm cách nào để kiểm tra xem Java JDK có được cài đặt trên Mac không?

Trên Mac OS X Mavericks, tôi thấy như sau:

1) Mặc định JRE tích hợp: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDK được tải xuống từ Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDK được tải xuống từ Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Tài nguyên


16
Sẽ là tốt khi đề cập rằng homebrew-cask có thể được cài đặt bằng lệnh brew install caskroom/cask/brew-caskthay vì brew install caskđó là một plugin Emacs.
Unnawut

7
Tôi gặp một vài vấn đề trong khi thực hiện giải pháp này, một trong số đó là jenvtrả lại No such file or directory.lỗi. Wiki này đã giúp giải quyết nó cho tôi. github.com/gcuisinier/jenv/wiki/Trouble-Shoot
juil 22/8/2016

10
Tôi sẽ thêm rằng tất cả các cài đặt java sẽ có trong /Library/Java/JavaVirtualMachines/và khi thêm chúng với jenv addbạn thêm đường dẫn trông như thế này /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Chúc mừng!
Nikolay Tsenkov

14
Kể từ ngày 23 tháng 6 năm 2017, tôi đã chạy brew cask search java7nhưng không tìm thấy Cask nào cho "java7".
Mingliang Liu

4
@MingliangLIU vâng tôi cũng vậy ... nó thực sự rất tệ. Tôi thấy các vấn đề về điều này trên Github là họ đã đề cập đến một số công việc xung quanh nhưng tôi không thể làm cho nó hoạt động được. Vì vậy, cuối cùng tôi đã phải thực hiện "cách thủ công" thông qua các trang web "phiên bản Java tải xuống và cài đặt" của apple và oracle. Sau đó sử dụng /usr/libexec/java_home -Vđể kiểm tra lại các đường dẫn nơi chúng được cài đặt.
Adrien Be

304

Gỡ cài đặt jdk8, cài đặt jdk7, sau đó cài đặt lại jdk8.

Cách tiếp cận của tôi để chuyển đổi giữa chúng (trong .profile):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Sau đó, bạn có thể chỉ cần gõ java7hoặc java8trong một thiết bị đầu cuối để chuyển đổi phiên bản.

(chỉnh sửa: được cập nhật để thêm cải tiến Dylans cho Java 9)


18
Cho đến nay đây là lựa chọn tốt nhất cho tôi. dễ dàng có thể chuyển sang bất kỳ phiên bản nào chỉ bằng một lệnh đơn giản "java8" hoặc "java7". Cảm ơn sự giúp đỡ
MMHMasud

4
Tuyệt quá ! :) Và đối với những người khác như tôi, bạn có thể sử dụng: ls / Library / Java / JavaVirtualMachines để xem phiên bản nào có sẵn. Sau đó, bạn có thể chuyển đổi trên các phiên bản 1.8.x khác nhau. Và bạn cũng phải thêm xuất PATH = $ JAVA_HOME / bin: $ PATH
Nico

4
Cảm ơn vì điều này. Tôi chỉ muốn đề cập rằng tôi đã quản lý để làm điều này bằng cách cài đặt jdk7 sau jdk8 (không cần phải gỡ cài đặt jdk8).
Tít

6
Tại sao tôi lại lãng phí thời gian của mình với jenv, vì điều này chỉ hoạt động và không làm xáo trộn khởi động shell của bạn thêm 0,5 giây với jenv init.
cvakiitho

2
Nếu bạn đang cố gắng để java 9 hoạt động theo cách này, thì đối số phiên bản cho java_home cho java 9 chỉ đơn giản là 9ví dụexport JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley

125

Dành cho macOS Sierra 420

Hướng dẫn này đã được ghép lại với nhau từ nhiều nguồn khác nhau (trả lời ở trên cũng như các bài đăng khác) và hoạt động hoàn hảo.

0. Nếu bạn chưa có, hãy cài đặt homebrew.

Xem https://brew.sh/

1. Cài đặt jenv

brew install jenv

2. Thêm jenv vào hồ sơ bash

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Thêm jenv vào đường dẫn của bạn

export PATH="$HOME/.jenv/shims:$PATH"

4. Nhấn "thùng / phiên bản"

FYI: "Tap" mở rộng danh sách các repos có sẵn mà brew có thể cài đặt, bên trên và ngoài danh sách repos mặc định của brew.

brew tap caskroom/versions

5. Cài đặt phiên bản java mới nhất

brew cask install java

6. Cài đặt java 6 (hoặc 7 hoặc 8 bất cứ thứ gì bạn cần)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Có thể đóng và khởi động lại Terminal để nó thấy bất kỳ bình ENV mới nào được thiết lập.

7. Xem lại cài đặt

Tất cả các phiên bản Java được cài đặt ở đây: /Library/Java/JavaVirtualMachineshãy xem.

ls -la /Library/Java/JavaVirtualMachines

8. Thêm từng đường dẫn vào jenv một lần.

Chúng ta cần thêm "/ Nội dung / Trang chủ" vào thư mục phiên bản. Chú ý: Sử dụng các đường dẫn thực tế trên máy tính của bạn ... đây là những chỉ VÍ DỤ 's

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Kiểm tra xem jenv đã đăng ký chưa

jenv versions

10. Đặt phiên bản java để sử dụng (toàn cầu)

Trong đó XX khớp với một trong các mục trong danh sách phiên bản ở trên.

jenv global XX

Kiểm tra phiên bản java

java -version

Kiểm tra phiên bản jenv

Cũng nên chỉ ra phiên bản hiện tại đang được sử dụng với dấu hoa thị.

jenv versions

LÀM XONG


Tham khảo nhanh trong tương lai

Để thay đổi phiên bản java

... Xem danh sách các phiên bản java có sẵn

jenv versions

... sau đó, nơi XX khớp với một mục trong danh sách trên

jenv global XX

1
Ngoài ra, hãy khởi động lại thiết bị đầu cuối của bạn saubrew cask install java*
vắt 22/11/18

1
Rõ ràng và giải thích tuyệt vời từng bước.
Ritesh Singh

1
Lỗi: Cask 'java8' không khả dụng: Không tồn tại Cask với tên này.
Alexey Sh.

6
java8 / 9/10 arent có sẵn nữa dưới dạng thùng. Hãy thử điều này thay vì: "thùng bia cài đặt adoptopenjdk / openjdk / adoptopenjdk8"
supi

1
brew tap caskroom/versionsnên làbrew tap homebrew/cask-versions
Vyacheslav Cotruta

42

SDKman! là một công cụ tuyệt vời để sử dụng nhiều phiên bản Java, Gradle, Groovy, Kotlin và các công cụ JVM khác trên Mac OS. Cài đặt và sử dụng tài liệu rõ ràng trên trang web chính.

(Tôi không có liên kết, chỉ là một người dùng hạnh phúc).

Như một cách sử dụng ví dụ, nếu tôi nhập nội dung sau vào cửa sổ Terminal, có một danh sách các phiên bản SDK Java có sẵn (được chỉnh sửa để ngắn gọn):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Ở đây +biểu thị rằng phiên bản đã được cài đặt. >biểu thị phiên bản nào hiện đang được sử dụng. Để cài đặt phiên bản:

$ sdk install java 7u141-zulu

Để sử dụng một phiên bản trong cửa sổ Terminal này:

$ sdk use java 9ea170

sdkman hỗ trợ các phiên bản bắt đầu với java 1.7. Nếu bạn sẵn sàng sử dụng java 1.6, giải pháp này có thể không phù hợp với bạn.
Aykut Akıncı

sdkman là tuyệt vời, nhưng họ không hỗ trợ các bản phát hành cụ thể trong một phiên bản. Ví dụ: Datastax Dev Center chỉ hoạt động với 1.8.0_151 nhưng tôi không thể chỉ định điều đó với sdkman. Hy vọng họ thêm nhiều phiên bản.
Eduardo Dennis

Nếu bạn có phiên bản địa phương, tôi nghĩ bạn có thể cài đặt nó vào SDKMan - sdkman.io/usage#localversion (nhưng tôi chưa thử nó)
Michael Easter

6

Như tìm thấy trên trang web này Vì vậy, hãy bắt đầu bằng cách cài đặt jEnv

  1. Chạy cái này trong terminal

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Thêm jEnv vào hồ sơ bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Khi bạn cài đặt lần đầu, jEnv sẽ không có bất kỳ JDK nào được liên kết với nó.

    Ví dụ, tôi chỉ cài đặt JDK 8 nhưng jEnv không biết về nó. Để kiểm tra các phiên bản Java trên jEnv

    Hiện tại, nó chỉ tìm thấy phiên bản Java (jre) trên hệ thống. Các *phiên bản hiện đang được chọn. Không giống như rvm và rbenv, jEnv không thể cài đặt JDK cho bạn. Bạn cần cài đặt JDK thủ công từ trang web của Oracle.

  4. Cài đặt JDK 6 từ trang web của Apple. Điều này sẽ cài đặt Java trong /System/Library/Java/JavaVirtualMachines/. Lý do chúng tôi cài đặt Java 6 từ trang web của Apple là vì SUN không đưa ra JDK 6 cho MAC, vì vậy Apple đã tạo / sửa đổi phiên bản triển khai của riêng mình.

  5. Tương tự cài đặt JDK7 và JDK8.

  6. Thêm JDK vào jEnv.

    JDK 6:

    JDK 7: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Kiểm tra các phiên bản java được cài đặt bằng jenv

    http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Vì vậy, bây giờ chúng tôi có 3 phiên bản Java trên hệ thống của chúng tôi. Để đặt phiên bản mặc định, sử dụng lệnh

    jenv local <jenv version>

    Ví dụ: Tôi muốn Jdk 1.6 bắt đầu IntelliJ

    jenv local oracle64-1.6.0.65
  9. kiểm tra phiên bản java

    chuyển đổi java http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

Đó là nó. Bây giờ chúng tôi có nhiều phiên bản java và chúng tôi có thể chuyển đổi giữa chúng một cách dễ dàng. jEnv cũng có một số tính năng khác, chẳng hạn như trình bao bọc cho Gradle, Ant, Maven, v.v. và khả năng thiết lập các tùy chọn JVM trên toàn cầu hoặc cục bộ. Kiểm tra các tài liệu để biết thêm thông tin.


5
Không đặt hình ảnh của các lệnh của bạn, nó sẽ gây khó khăn cho việc sao chép / dán chúng. Để tô sáng các lệnh, sử dụng backticks "` "cho một từ đơn hoặc một lệnh ngắn hoặc thụt lệnh của bạn với 4 khoảng trắng trên dòng riêng của nó (hoặc bội số của 4 trong danh sách).
Seki

1
Cảm ơn Seki. Tôi đã vật lộn để đăng ảnh và mất một thời gian dài để định dạng nhưng không thể làm cho đúng. Cảm ơn đã chia sẻ thông tin backticks.
Dinesh Arora

4
Tôi nghĩ rằng bạn có thể đã sử dụng cùng một hình ảnh bốn lần.
Ellen Spertus

5

Tôi tìm thấy trình quản lý phiên bản Java này được gọi là Jabba gần đây và cách sử dụng rất giống với trình quản lý phiên bản của các ngôn ngữ khác như rvm (ruby), nvm (nút), pyenv (python), v.v. Mac.

Sau khi cài đặt, nó sẽ tạo một thư mục trong ~ / .jabba để đặt tất cả các phiên bản Java mà bạn cài đặt. Nó "Hỗ trợ cài đặt Oracle JDK (mặc định) / Server JRE, Zulu OpenJDK (kể từ 0.3.0), SDK của IBM, Phiên bản công nghệ Java (từ 0.6.0) và từ các URL tùy chỉnh.".

Sử dụng cơ bản được liệt kê trên Github của họ. Tóm tắt nhanh để bắt đầu:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8

4

Tôi đang sử dụng Mac OS X 10.9.5. Đây là cách tôi quản lý nhiều JDK / JRE trên máy của mình khi tôi cần một phiên bản để chạy ứng dụng A và sử dụng phiên bản khác cho ứng dụng B.

Tôi đã tạo tập lệnh sau khi nhận được một số trợ giúp trực tuyến.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

Tôi đặt đoạn script trên trong tệp .profile. Chỉ cần mở terminal, gõ vi .profile, nối đoạn script với đoạn mã trên và lưu nó. Khi loại ra của bạn source .profile, điều này sẽ chạy tập lệnh hồ sơ của bạn mà không cần bạn phải khởi động lại thiết bị đầu cuối. Bây giờ gõ java -versionnó sẽ hiển thị 1.7 như phiên bản hiện tại của bạn. Nếu bạn có ý định thay đổi nó thành 1.8 thì hãy bình luận dòng setjdk jdk1.7.0_15.jdkvà bỏ ghi chú dòng setjdk jdk1.8.0_60.jdk. Lưu tập lệnh và chạy lại nó bằng lệnh nguồn. Tôi sử dụng cơ chế này để quản lý nhiều phiên bản JDK / JRE khi tôi phải biên dịch 2 dự án Maven khác nhau cần các phiên bản java khác nhau.


3

Jenv trên Mac Sierra:

Nếu không hoạt động sau khi cài đặt, hãy sửa lỗi này để thêm java thực thi vào đường dẫn

export PATH="$HOME/.jenv/shims:$PATH"

mặc dù eval "$(jenv init -)"có thể làm công việc này Lý do là thư mục / bin không còn ở đó như mô tả trong trang chủ của nó, nhưng thư mục shim được sử dụng như / bin thay thế.

  • Hãy chắc chắn ~ / .jenv ở đó
  • which java có thể in / Thư viện / ...
  • jenv toàn cầu 1.8
  • vỏ jenv 1.8

Cuối cùng, which javacung cấp cho bạn:

/Users/xxxx/.jenv/shims/java


3

Trong cùng một tinh thần hơn @Vegard (nhẹ):

  • Cài đặt JDK mong muốn với Homebrew
  • Đặt jdkhàm bash này và mặc định trong của bạn.profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
  • và sau đó, để chuyển jdk của bạn, bạn có thể làm

     jdk 9
     jdk 11
     jdk 13

Dựa trên https://github.com/AdoptOpenJDK/homebrew-openjdk .


0

Đây là phiên bản DRY hơn cho bash (Dựa trên câu trả lời của Vegard)

Thay thế 1.7 và 1.8 bằng bất kỳ phiên bản nào bạn quan tâm và bạn sẽ có một bí danh gọi là 'javaX'; trong đó 'X' là phiên bản java (7/8 trong đoạn trích bên dưới) sẽ cho phép bạn dễ dàng chuyển đổi các phiên bản

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done

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.