web-dev-qa-db-ja.com

OS XでデフォルトのJava(JDK)バージョンを設定または変更するにはどうすればいいですか?

どのようにしてMac上のJavaのデフォルトバージョンを変更できますか?

524
Venkat

最初に/usr/libexec/Java_home -Vを実行すると、以下のようなものが出力されます。

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

デフォルトにしたいバージョンを選びます(引数として1.6.0_65-b14-462):

export Java_HOME=`/usr/libexec/Java_home -v 1.6.0_65-b14-462`

あるいは、メジャーバージョンだけを指定することもできます。

export Java_HOME=`/usr/libexec/Java_home -v 1.8`

Java -versionを実行すると、次のようになります。

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)

シェルのinitファイルにexport Java_HOME…行を追加するだけです。

854
markhellewell

この答えは対処する試みです:どのようにJavaバージョンをシステム全体で制御するか(現在実行中のシェルだけでなく)いつJDKのいくつかのバージョンは、開発目的でmacOS El Capitan以降(Sierra、High Sierra、Mojave)にインストールされます。私が知る限り、現在の答えはどれもそれをしていません(*)。

開発者として、私はいくつかのJDKを使用していますが、一方から他方に簡単に切り替えたいと思います。通常、私は一般的な使用のための最新の安定したものと、テストのための他のものを持っています。しかし、私はシステムを(たとえば、IDEを起動したとき)私が今持っている最新の「早期アクセス」バージョンを使用したくないのです。システムのデフォルトを制御したいのですが、それは最新のものでなければなりません。

次のアプローチは、Java 7 to 12で少なくとも動作します(この記事の執筆時点での早期アクセス)、 Oracle JDKまたはOpenJDK2018年10月中旬以降に作成されたAdoptOpenJDKによるビルド ) 。

サードパーティ製ツールを使用しないソリューション:

  • すべてのJDKを/Library/Java/JavaVirtualMachinesの下のデフォルトの場所に残します。システムはデフォルトで最高バージョンを選択します。
  • JDKがデフォルトで選択されないようにするには、Contents/Info.plistの名前をInfo.plist.disabledに変更します。そのJDKは、$Java_HOMEが指す場合でも、スクリプトまたは構成で明示的に参照される場合でも使用できます。システムのJavaコマンドは単に無視します。

システムランチャーは、Info.plistファイルを持つバージョンの中で最も新しいバージョンのJDKを使用します。

代替JDKを使用してシェルで作業する場合は、既存の回答(jenv、または/usr/libexec/Java_homeを囲むカスタムエイリアス/スクリプトなど)の中からメソッドを選択してください。


調査の詳細 この要点で


(*)現在の回答は、時代遅れ(macOS El CapitanまたはSierraでは無効)であるか、単一のJDKのみに対応しているか、システム全体の側面に対応していません。多くの人が$Java_HOMEを変更する方法を説明していますが、これは現在のシェルとそこから起動されるものにのみ影響します。 OSランチャーから起動したアプリケーションには影響しません(適切なファイルとログアウト/ログインを変更しない限り、面倒です)。 jenvでも同じですが、すべてがクールですが、環境変数が変更されるだけなので、制限は同じです。

317
Hugues M.

上記の答えに加えて、私は.bash_profileに次の行を入れて切り替えることを本当に便利にします(Java 9に対する@ elektrominのコメントを含む)。

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"

挿入した後、$ source .bash_profileを実行してください

次のように入力して、Java 8に切り替えることができます。

$ 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)
150
Justin Zhang

/ 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

魚を使わないのなら、bashで似たようなことができます。

#!/bin/bash

jhome () {
  export Java_HOME=`/usr/libexec/Java_home [email protected]`
  echo "Java_HOME:" $Java_HOME
  echo "Java -version:"
  Java -version
}

次に、javasを切り替えるには

$> 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

49
kenglxn

Jenvを使うのは簡単な方法です。

1.インストールjenv

     curl -s get.jenv.io |バッシュ

2.設定jenv

cd〜/ .jenv /候補/ 
 mkdir Java 
 cd Java 
 mkdir 1.7 
 mkdir 1.8 

3. jdkパスへのリンク

 ln -s /ライブラリ/ Java/JavaVirtualMachines/jdk1.7.0_79.jdk /コンテンツ/ Home/bin〜/ .jenv /候補/ Java/1.7 
 ln -s /ライブラリ/ Java/JavaVirtualMachines/jdk1.8.0_45.jdk /目次/ホーム/ bin〜/ .jenv /候補/ Java/1.8 

4.あなたはすべて設定されています

スイッチコマンド: 

jenvはJava 1.8を使う

デフォルト設定 

jenvデフォルトJava 1.7

30
Yuantao

これは少しややこしいですが、 OS X 10.9(Mavericks)にJavaをインストールする で説明されている手順に従うようにしてください。基本的に、エイリアスをJavaに更新する必要があります。

ステップバイステップ:

JDK 1.7をインストールした後、リンクを現在のJavaに変更するためにSudo ln -snfを実行する必要があります。これを行うには、ターミナルを開いて以下のコマンドを発行します。

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

ディレクトリjdk1.7.0_51.jdkは、インストールしたSDKのバージョンによって変わる可能性があります。

さて、あなたはJava_HOMEがインストールされた場所を指すようにjdk_1.7.0_xx.jdkを設定する必要があります。ターミナルをもう一度開き、次のように入力します。

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

export Java_HOMEファイルに上記の.bashrc行を追加して、ターミナルにJavaを永続的に含めることができます。

26
Trein

jREだけでなくJDKもインストールする

/usr/libexec/Java_home -v 1.8

与える

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

touch .bash_profile

open -a TextEdit.app .bash_profile

TextEditはあなたが記入できる空白のページを表示します。

docに追加: export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

ターミナルで:

export Java_HOME="$(/usr/libexec/Java_home -v 1.8)"

次のコマンドを試してください。

javac -version

出力する必要があります:

javac 1.8.0_111
20
user2708060

tl; dr

次の行を追加してください。 

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

ファイルへ

~/.bash_profile

ダウンロードしたバージョンに置き換えます。

それからsource ~/.bash_profile

15
dustinevan
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 [email protected]`
    export PATH=$Java_HOME/bin:$PATH
  fi
}

これをあなたの〜/ .profileに入れてsetjdk 1.8setjdk 1.7setjdk 9などのようにあなたの端末で使用してください。

あなたがremoveFromPathを持っていないならそれはそれです: 

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

10
Gabriel Reiser

Jenvを使用してください。これはJava環境マネージャのようなものです。それは超使いやすくてきれいです

Macの場合は、次の手順に従います。

brew install jenv

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

インストール:bashを使っているのなら以下のステップに従ってください。

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

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

$ exec $Shell -l

必要なバージョンのJVMを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

インストールされているバージョンを確認してください。

jenv versions

使用するJavaのバージョンを設定します。

jenv global Oracle64-1.6.0
5
slal

アップルの公式の/ Java_home(1)のmanページから

**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`
5
Antonio

それでもまだuはそれを設定することができません。このコマンドを使用してください。

export Java_HOME = /usr/libexec/Java_home -v 1.8

それならあなたはこれを使わなければなりません。

export Java_HOME = $(/usr/libexec/Java_home -v 1.8)

それはきっとうまくいくでしょう。

3
RohitKumar

最初に環境変数をどこに格納しているのか調べてください。 

  1. emacs 
  2. bash_profile 
  3. zshrcファイル

環境変数を設定する手順: -

  1. Javaからjdkをダウンロードしてください。
  2. ダブルクリックでインストール
  3. ファイルに環境変数を設定します。

    a。 emacs.profileの場合は、この link ORを使用できます 

enter image description here

b。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)

すべて設定された今、あなたは簡単にJavaのバージョンをアップグレードしたりグレードを下げることができます。

3
Vrushali Raut

JDK切り替えスクリプト

私は上記の@Alexからの回答を修正し、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;
}

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)

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)
3

あなたがfishを使っていて、あなたがmacを使っていて、JDKを切り替えることができるようにしたいのなら、以下はMacで私のために働きます。

@ kenglxnの答えは私にはうまくいきませんでした、そして私はそれがbcosがグローバルである-gを設定しなかったことを思い出しました!

以下の下に置いてください〜/ .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

どのバージョン/マイナーバージョンをインストールしたのかを知るには、次のようにします。

/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
Gob00st

@markhellewellの回答に基づいて、私はあなたのためにそれをするであろうエイリアス関数をいくつか作成しました。シェルのスタートアップファイルにこれらを追加するだけです。

#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

1
Alex

これが私のやり方です Linux (Ubuntu/Mint mate) 、私はMacでも同じようにできると思います。


インストール&設定

ステップ:  

  • [基本 - 部分]
  • 手動でjdk .tgz ファイル) をダウンロードしてください。 
  • 適切な場所で、適切に解凍して名前を変更します。
    例:/mnt/star/program/Java/jdk-1.8
  • ソフトリンクを作成します。これは、後でJavaバージョンを切り替えるために変更されます。
    例:ln -s /mnt/star/program/Java/jdk-1.8 /mnt/star/program/Java/java
    したがって、/mnt/star/program/Java/javaはソフトリンクです。
  • 起動スクリプトでJava_HOMEを設定します。
    /etc/profile.d/eric.shのようなファイルを使うことも、単に~/.bashrcを使うこともできます。
    例:Java_HOME=/mnt/star/program/Java/java
  • それから新しいbashシェルを開きます。 Java -versionはJavaのバージョンを表示します。
  • [その他のバージョン - パート]
  • 必要に応じて、上記の手順と同様に、より多くのJavaバージョンをダウンロードしてインストールします。
    例えば
    /mnt/star/program/Java/jdk-11
  • [スイッチ部]
  • ~/.bashrcでは、さまざまなJavaバージョン用の変数を定義します。
    例えば
    _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
  • ~/.bashrcには、Javaのバージョンを切り替えるためのコマンドを定義します。
    例えば
    ## 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"
  • ターミナルで、変更を有効にするためのsource ~/.bashrc
  • それから定義されたコマンドを使って切り替えることができます。 

コマンド - 上の設定から

コマンド:  

  • jv11
    Java 11に切り替える
  • jv8
    Java 8に切り替える
  • jvd
    デフォルトのJavaバージョンに切り替えます。これは、上記で定義された_E_Java_HOME_Dで表されます。
  • jv
    Javaのバージョンを表示します。

出力例:  

[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]:~$ 

機構

  • Java_HOMEとして使用されるソフトリンクを変更することで切り替えます。

ヒント

  • 私のマシン上でjdkを手動でインストールするとき、私はマイナーバージョンを保持し、それからメジャーバージョンとソフトリンクをしますがマイナーバージョンはありません。
    例えば
    //これは実際のディレクトリです。
    jdk1.8.0_191 

    //これはjdk1.8.0_191へのソフトリンクです
    jdk-8 

    //これはjdk-8またはjdk-11へのソフトリンクです
    Java 

  • コマンドエイリアスは~/.bashrcで定義しますが、変数は別のファイルで定義します。
    私は変数を定義するために~/.eric_varを使用しています、そして~/.bashrcはそれを供給します(例えばsource $HOME/.eric_var).

1
Eric Wang

次のコマンドを~/.zshenvファイルに追加してください

export Java_HOME=`/usr/libexec/Java_home -v 1.8` 
1
xsilen T

複数のバージョンがあり、特定のバージョンを使用して何かを実行したい場合は、この例を使用してください。

/usr/libexec/Java_home -v 1.7.0_75 --exec Java -jar you-file.jar
0
MonstroDev

/usr/libexec/Java_home -Vで与えられたリストに別々にインストールされたJDKを含める簡単な方法は以下のようにディレクトリをシンボリックリンクすることです:

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

たとえば、Android Studioに含まれているJDK(この記事の執筆時点では1.8.0_152)を登録するには、次のようにします。

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

これでJava_homeMatching Java Virtual Machinesの下にJDKをリストします、そして上で説明されるようにそれを選択することができます。

0
friederbluemle

このツールはあなたのために仕事をします: 

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

これは、現在のJavaバージョンを定義するために使用できる単純なJavaOneです。バージョンは、ツールでバージョンが選択された後に開かれるシェルで使用できます。

0
Hendrik Ebbers