バージョンの切り替えを許可してMac OSXにJavaをインストールするにはどうすればよいですか?


313

新しいリリースなので、Mac OSXにOpenJDK Javaをインストールし、他のJDKと一緒に機能させたい。現在、tar.gzをダウンロードして自分のパスに配置しましたが、維持するのが困難です。

自動的にさらに多くのことを実行することがわかった他の唯一のインストールは、Homebrew caskを介したインストールです。現在のバージョンのみのようにも見えます:

brew cask info java

ショー:

java:13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/

そこからインストールできますが、次に何をしますか?新しいバージョンだけで立ち往生していますか?


質問するだけで、質問タグを1つのバージョンに制限しておくことはできますか?とにかく、そのようなバージョン固有のインストールスクリプト/手順はありません。これは一般的な(バージョン固有ではない)質問であり、質問と回答が示唆することを人々が探し始める場所だと思うので、java-11のみでタグ付けすれば十分です。
ナマン2018年

回答のスクリプトには特定のバージョンが含まれていますが、他のバージョンについては簡単に解釈できます。ただし、コミュニティメンバーが検索する内容の一部でもあるため、更新された最新の回答に注目し、古いバージョン6やバージョン8のトピックと区別することで、正しい回答をすばやく見つけるのに役立ちます。最新の安定したバージョンと最新の新しいバージョンを持つことは、保持するのに合理的なタグだと思います。
Jayson Minard

おそらく、jenvを使用して複数のJavaバージョンを管理することをお勧めします。
パランザ

回答:


718

注: これらのソリューションは、Java 8や新しいJava 13を含むJavaのさまざまなバージョン、およびリストされているバージョンマネージャーでカバーされている他の以前のJavaバージョンで機能します。これには、OpenJDK、Oracle、IBM、Azul、Amazon Correto、Gralなどの代替JDKが含まれます。Java 7、Java 8、Java 9、Java 10、Java 11、Java 12、Java 13で簡単に作業できます!

JDKの切り替えを管理するだけでなく、インストールを実行する方法のいくつかのオプションがあります。インストールは、Homebrew、SDKMANJabba、または手動インストールで実行できます。切り替えは、JEnvSDKMANJabbaによって、または設定によって手動で行うことができますJAVA_HOME。これらのすべてを以下に説明します。


取り付け

まず、Homebrew、SDKMAN、またはtar.gzファイルの手動インストールなど、好きな方法でJavaをインストールします。手動インストールの利点は、JDKの場所をMac OSXの標準化された場所に配置できることです。

SDKMANでインストール

これは、インストールとバージョン切り替えの両方を処理するという点で単純なモデルですが、JDKを非標準のディレクトリにインストールするという警告があります。

< 以下の「SDKMANを使用したバージョンのインストールと切り替え」を参照 >

Jabbaを使用してインストールする

これは、インストールとバージョン切り替えの両方が同じツールで処理されるという点で、単純なモデルでもあります。インストールは非標準のディレクトリに行われます。

< 以下の「Jabbaを使用したバージョンのインストールと切り替え」を参照 >

OpenJDKダウンロードページから手動でインストールします。

  1. Mac OSX用のOpenJDKをhttp://jdk.java.net/からダウンロードします(例:Java 13

  2. OpenJDK tarをアーカイブ解除し、結果のフォルダー(つまりjdk-13.jdk)を/Library/Java/JavaVirtualMachines/フォルダーに配置します。これは、JDKインストールの標準で予期される場所であるためです。また、実際のどこにでも設置できます。

Homebrewでインストール

2018年10月3日より前にHomebrew Caskで利用可能なJavaのバージョンは、確かにOracle JVMでした。ただし、現在はOpenJDKに更新されています。必ずHomebrewを更新すると、インストール可能な最新バージョンが表示されます。

  1. Homebrewをまだインストールしていない場合はインストールしてください。それが更新されていることを確認してください:

    brew update
  2. キャスクタップを追加していない場合(またはステップ#3で古いJavaバージョンが表示されなくなった場合):

    brew tap homebrew/cask-versions

    そして、のためにAdoptOpenJDKのバージョン、そのタップを追加します。

    brew tap adoptopenjdk/openjdk

    これらのキャスクはJavaバージョンを頻繁に変更し、追加のJavaバージョンで他のタップが存在する可能性があります。

  3. インストール可能なバージョンを探します。

    brew search java   

    またはAdoptOpenJDKバージョンの場合:

    brew search jdk     
  4. インストールされるバージョンの詳細を確認します。

    brew cask info java

    またはAdoptOpenJDKバージョンの場合:

    brew cask info adoptopenjdk
  5. などのJDKの特定のバージョンをインストールしjava11adoptopenjdk8あるいは単に、javaまたはadoptopenjdk現在のために。例えば:

    brew cask install java

    古いバージョンへの完全修飾パスも使用できます。

    brew cask install homebrew/cask-versions/java11

そして、これらは/Library/Java/JavaVirtualMachines/Mac OSXで予想される従来の場所にインストールされます。

その他のインストールオプション:

openJDKの他のいくつかのフレーバーは次のとおりです。

OpenJDKの Azul Systems Java Zulu認定ビルドは、サイトの指示に従ってインストールできます。

Zulu®は、Java SE標準に完全に準拠したOpenJDKの認定ビルドです。Zuluは100%オープンソースで、無料でダウンロードできます。これで、Java開発者、システム管理者、およびエンドユーザーは、デプロイメントの柔軟性とアップグレードタイミングの制御により、オープンソースJavaのすべてのメリットを享受できます。

Amazon Correto OpenJDKビルドには、バージョン8またはバージョン11(他のバージョンも登場予定)用の使いやすいインストールパッケージがあり/Library/Java/JavaVirtualMachines/、Mac OSXの標準ディレクトリにインストールされます。

Amazon Correttoは、Open Java Development Kit(OpenJDK)の無料のマルチプラットフォームのプロダクションレディディストリビューションです。Correttoには、パフォーマンスの強化とセキュリティ修正を含む長期サポートが付属しています。Amazonは何千もの本番サービス上でCorrettoを内部で実行しており、CorrettoはJava SE標準との互換性があると認定されています。Correttoを使用すると、Linux、Windows、macOSなどの一般的なオペレーティングシステムでJavaアプリケーションを開発して実行できます。


私のJDKはどこですか?!?!

以前にインストールされたJava JDKの場所をデフォルトのシステムの場所に見つけるには、次のコマンドを使用します。

/usr/libexec/java_home -V

一致するJava仮想マシン(6):
13、x86_64: "OpenJDK 13" /Library/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home 12、x86_64: "OpenJDK 12" / Library / Java / JavaVirtualMachines / jdk-12 .jdk / Contents / Home
11、x86_64: "Java SE 11" /
ライブラリ/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home 10.0.2、x86_64: "Java SE 10.0.2" /ライブラリ/ Java / JavaVirtualMachines /jdk-10.0.2.jdk/Contents/Home
9、x86_64: "Java SE 9"
/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home 1.8.0_144、x86_64: "Java SE 8" /ライブラリ/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

を使用して、特定のJavaバージョンの場所のみを報告することもでき-vます。たとえば、Java 13の場合:

/usr/libexec/java_home -v 13

/ライブラリ/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

インストールされたJDKの場所を知ることは、JEnvのようなツールを使用したり、SDKMANにローカルインストールを追加したり、JabbaでシステムJDKをリンクしたりするときにも役立ちます。これらの場所を知る必要があります。

他のツールによってインストールされたJDKを見つける必要がある場合は、次の場所を確認してください。

  • SDKMANのインストール先 ~/.sdkman/candidates/java/
  • Jabbaのインストール先 ~/.jabba/jdk

手動でバージョンを切り替える

Java実行可能ファイルは、で設定されたJDKを使用するラッパーであるJAVA_HOMEため、これを変更して、使用されているJDKを変更することもできます。

たとえば、JDK 13をインストールまたはuntarした/Library/Java/JavaVirtualMachines/jdk-13.jdk場合、それが最も高いバージョン番号である場合は、それが既にデフォルトになっているはずですが、そうでない場合は単に設定できません。

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

これで、パスに含まれるJava実行可能ファイルはすべてこれを参照し、正しいJDKを使用します。

/usr/libexec/java_home前述のユーティリティを使用すると、エイリアスを作成したり、さまざまなJDKインストールの場所を識別してJavaバージョンを変更するコマンドを実行したりできます。たとえば、.profileまたはでシェルエイリアスを作成すると、次の.bash_profileように変更さJAVA_HOMEれます。

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_12_HOME=$(/usr/libexec/java_home -v12)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'
alias java10='export JAVA_HOME=$JAVA_10_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java12='export JAVA_HOME=$JAVA_12_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'

# default to Java 13
java13

次に、バージョンを変更するには、エイリアスを使用します。

java8
java -version

Javaバージョン「1.8.0_144」

もちろん、JAVA_HOME手動で設定することもできます!


JEnvを使用したバージョンの切り替え

JEnvは、Java JDKがマシン上にすでに存在し、任意の場所にあることができると想定しています。通常、インストールされているJava JDKはにあり/Library/Java/JavaVirtualMachines/ます。JEnvは、Javaのグローバルバージョン(現在のシェルに1つ)と、一部のプロジェクトが他のプロジェクトとは異なるバージョンを必要とする場合に便利なディレクトリごとのローカルバージョンを設定できます。

  1. JEnvをまだインストールしていない場合はインストールしますサイトhttp://www.jenv.be/にある手動インストールまたはHomebrewの使用に関する説明。

  2. JEnvにJavaバージョンを追加します(これを他の場所に配置した場合は、ディレクトリを調整します)。

    jenv add /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
  3. 次のコマンドを使用して、グローバルバージョンを設定します。

    jenv global 13

jenv add同様の方法で、他の既存のバージョンを追加し、使用可能なバージョンをリストすることもできます。たとえばJava 8:

jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home 
jenv versions

その他のコマンドについては、JEnvのドキュメントを参照してください。システム全体、シェル、またはローカルディレクトリごとに、いつでも任意のJavaバージョン(Oracle、OpenJDK、その他)に切り替えることができます。

JAVA_HOMEJEnvの使用中に管理するために、エクスポートプラグインを追加してこれを行うことができます。

$ jenv enable-plugin export
  You may restart your session to activate jenv export plugin echo export plugin activated

エクスポートプラグインJAVA_HOMEは、すでに設定されている場合は調整されない可能性があるため、JEnvで管理できるように、プロファイルでこの変数をクリアする必要がある場合があります。

また、使用することができjenv exec <command> <parms...>て、単一のコマンドを実行するJAVA_HOMEと、PATH別のシェルを開くことなどが可能性があり、その1つのコマンドに対して正しく設定してください。


SDKMANを使用したバージョンのインストールと切り替え

SDKMANは少し異なり、インストールと切り替えの両方を処理します。SDKMANはまた、インストールされたJDKを独自のディレクトリツリー(通常は)に配置し~/.sdkman/candidates/javaます。SDKMANでは、グローバルなデフォルトバージョン、および現在のシェルに固有のバージョンを設定できます。

  1. https://sdkman.io/installからSDKMANをインストールします

  2. 利用可能なJavaバージョンをリストして、バージョンIDを確認します。

    sdk list java
  3. これらのバージョンの1つ(例えば、Java 13)をインストールします。

    sdk install java 13.0.0-open 
  4. 13をデフォルトバージョンにします。

    sdk default java 13.0.0-open

    または、セッションを13に切り替えます。

    sdk use java 13.0.0-open

listコマンドを使用してインストール可能なバージョンを一覧表示すると、Javaのさまざまなディストリビューションが表示されます。

sdk list java

さらに、JDK 8などの追加バージョンをインストールします。

sdk install java 8.0.181-oracle

SDKMANは、以前にインストールされた既存のバージョンで動作します。独自のバージョンラベルとJDKの場所を指定して、ローカルインストールを実行します。

sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

そしてそれを自由に使ってください:

sdk use java my-local-13

詳細については、SDKMAN使用ガイドと、インストールおよび管理できる他のSDKを参照してください

バージョンを変更するPATHJAVA_HOME、SDKMANが自動的に管理します。


Jabbaを使用したバージョンのインストールと切り替え

Jabbaは、インストールと切り替えの両方も処理します。また、JabbaはインストールされたJDKを独自のディレクトリツリー(通常は)に配置し~/.jabba/jdkます。

  1. ホームページの指示に従って、Jabbaをインストールします

  2. 利用可能なJDKのリスト

    jabba ls-remote
  3. Java JDK 12をインストールする

    jabba install openjdk@1.12.0
  4. これを使って:

    jabba use openjdk@1.12.0

バージョン名のエイリアスを作成したり、既にインストールされている既存のJDKにリンクしたり、GralalVM、Adopt JDK、IBM JDKなどの興味深いJDKの組み合わせを見つけることもできます。完全な使用ガイドは、ホームページにもあります。

バージョンを変更するPATHJAVA_HOME、Jabbaが自動的に管理します。


2
手動インストールのために私はあなたが設定する必要があると考えJAVA_HOME、特定のバージョンを選択するために何かexport JAVA_HOME=$(/usr/libexec/java_home -v <version>)自分の中.bash_profile
ピーター・ハル

@PeterHull一部のJavaバージョンマネージャは、JAVA_HOME手動で設定するのが嫌いで、自分で管理します。JEnvはJabbaやSDKMANについては以前に設定されていても、確かに調整しませんが、通常はその設定を管理します。バージョンを切り替えずに手動でインストールする場合にのみ、この値を直接設定してください。
ジェイソンミナード

完全に同意します。元の質問でバージョンの切り替えが要求され、JAVA_HOMEを設定するのが手動インストール方式でそれを行う(唯一の?)方法であるので、回答に注意していただければ幸いです。
Peter Hull

2
醸造樽内のJavaは、2018
。– Xingang Huang

16
おそらく、MacOSでさまざまなJDKを実行して、さまざまなアプローチをカバーするための最も広範囲で有用な答えです。
Kevin Hooke

7

これは私がやった方法です。

ステップ1: Java 11をインストールする

Mac用のJava 11 dmgは、https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.htmlからダウンロードできます

ステップ2: Javaのインストール後11.すべてのバージョンのインストールを確認します。端末に次のコマンドを入力します。

/usr/libexec/java_home -V

ステップ3: .bash_profileを編集する

sudo nano ~/.bash_profile

ステップ4:デフォルトとして11.0.1を追加します。(bash_profileファイルに以下の行を追加します)。

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

任意のバージョンに切り替える

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

CTRL + Xを押してbashを終了します。「Y」を押して変更を保存します。

ステップ5: bash_profileをリロードする

source ~/.bash_profile

ステップ6: Javaの現在のバージョンを確認する

java -version

素晴らしい解決策。しかし、JAVA_HOME 11をエクスポートしている間にjava -versionが8を指している場合はどうなりますか?
AlexGera

1
質問はOpen JDKについてですが、代わりにOracle JDKにリンクしました。Open JDKには、インストーラーやインストール手順がないようです。
Splaktar

1
@AlexGeraへの応答-次の行を追加:export $ PATH = $ JAVA_HOME / bin:$ PATH
Fuad Efendi

6

サードパーティツールなしでシステムのデフォルトバージョンを手動で切り替える:

この古い回答で詳しく説明されているように、macOS /usr/bin/javaは、Javaのバージョンを使用するラッパーツールです。JAVA_HOMEまたは、その変数が設定されていない場合、Javaのインストールが/Library/Java/JavaVirtualMachines/、最も高いバージョンのが使用されます。Contents/Info.plist各パッケージの下を見ることでバージョンを決定します。

この知識を武器に、次のことができます。

  • 名前を変更して、システムが使用するバージョンを制御する Info.plistデフォルトとして使用したくないバージョンのしてします(そのファイルは実際のJavaランタイム自体では使用されません)。
  • 設定により、特定のタスクに使用するバージョンを制御する $JAVA_HOME

OpenJDKとMojaveでもこれが正しいことを確認しました。

まったく新しいシステムでは、Javaバージョンはインストールされていません。

$ java -version
No Java runtime present, requesting install.

これをキャンセルし、https: //jdk.java.netでOpenJDK 11および12eaをダウンロードしてください。OpenJDK11をインストールします。

$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz

システムjavaは11です。

$ java -version
openjdk version "11.0.1" 2018-10-16
[...]

OpenJDK12をインストールします(現時点では早期アクセス)。

$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz 

システムjavaは12です。

$ java -version
openjdk version "12-ea" 2019-03-19
[...]

次に、OpenJDK 12をシステムのJavaラッパーから「非表示」にします。

$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled

システムJavaが11に戻りました。

$ java -version
openjdk version "11.0.1" 2018-10-16
[...]

また、手動で設定することにより、バージョン12を時間どおりに使用できますJAVA_HOME

$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]


6

マシンに複数のバージョンがインストールされている場合は、bashプロファイルに以下を追加します。

エクスポートJAVA_HOME_7 = $(/ usr / libexec / java_home -v1.7)

エクスポートJAVA_HOME_8 = $(/ usr / libexec / java_home -v1.8)

エクスポートJAVA_HOME_9 = $(/ usr / libexec / java_home -v9)

次のエイリアスを追加します。

エイリアスjava7 = 'export JAVA_HOME = $ JAVA_HOME_7'

エイリアスjava8 = 'export JAVA_HOME = $ JAVA_HOME_8'

エイリアスjava9 = 'export JAVA_HOME = $ JAVA_HOME_9'

エイリアスを使用して必要なバージョンに切り替えることができます:

ターミナルで:

~ >> java7 export JAVA_HOME=$JAVA_7_HOME


うん、これはここの別の答えでカバーされました。
ジェイソンミナード

3

もう1つの方法は、SDKMANを使用することです。https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/を参照してください

最初にSDKMANをインストールします:https ://sdkman.io/install 次に、...

  1. Oracle JDK 8をインストールします。 sdk install java 8.0.181-oracle
  2. OpenJDK 11をインストールします。 sdk install java 11.0.0-open

切り替えるには:

  • でJDK 8に切り替える sdk use java 8.0.181-oracle
  • でJDK 11に切り替える sdk use java 11.0.0-open

デフォルトを設定するには:

  • デフォルトでJDK 8に sdk default java 8.0.181-oracle
  • デフォルトでJDK 11に sdk default java 11.0.0-open

3

Homebrewとjenvの場合:

前提:Macマシンであり、すでに自作をインストールしている。

caskをインストールします。

$ brew tap caskroom/cask
$ brew tap caskroom/versions

最新のJavaをインストールするには:

$ brew cask install java

Java 8をインストールするには:

$ brew cask install java8

Java 9をインストールするには:

$ brew cask install java9

複数のバージョンをインストール/管理する場合は、「jenv」を使用できます。

jenvをインストールして構成します。

$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

インストールされたJavaをjenvに追加します。

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/Contents/Home

インストールされているすべてのJavaを表示するには:

$ jenv versions

上記のコマンドを実行すると、インストールされているJavaのリストが表示されます。

* system (set by /Users/lyncean/.jenv/version)
1.8
1.8.0.202-ea
oracle64-1.8.0.202-ea

使用するJavaバージョンを構成します。

$ jenv global oracle64-1.6.0.39

1
Error: caskroom/cask was moved. Tap homebrew/cask-cask instead、その後fatal: repository 'https://github.com/Homebrew/homebrew-cask-cask/' not found
ChumiestBucket

@ChumiestBucketの発言-このソリューションには複数の問題があります
javadba

1

私見、追加のアプリケーション/パッケージをすべてインストールする必要はありません。

次のコマンドを使用して、利用可能なバージョンを確認します。

> /usr/libexec/java_home -V
Matching Java Virtual Machines (8):
    11, x86_64: "Java SE 11-ea" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
    10.0.2, x86_64: "Java SE 10.0.2"    /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_181-zulu-8.31.0.1, x86_64:    "Zulu 8"    /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
    1.8.0_151, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
    1.7.0_80, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
    1.6.0_65-b14-468, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

上記のリストでOracleのJava SE 8ではなくAzul JDK 8を選択する場合は、次のようにコマンドを呼び出します。

> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

OracleのJava SE 8を選択するには、次のコマンドを呼び出します。

> /usr/libexec/java_home -v 1.8.0_151
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

ご覧のとおり、提供されるバージョン番号は一意の文字列のセットです:1.8.0_181 vs 1.8.0_151


最初の例にバージョン文字列を含めるべきではありません1.8.0_181-zulu-8.31.0.1か?それとも部分一致ですか?
Jayson Minard、2018年

これは実際にはJavaのバージョンを使用するために何も変更せず、の場所を報告するだけJAVA_HOMEです。これらのコマンドを使用した手動切り替えについては、他の回答で説明しています。
Jayson Minard、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.