どのようにしてMac上のJavaのデフォルトバージョンを変更できますか?
最初に/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…
行を追加するだけです。
この答えは対処する試みです:どのようにJavaバージョンをシステム全体で制御するか(現在実行中のシェルだけでなく)いつJDKのいくつかのバージョンは、開発目的でmacOS El Capitan以降(Sierra、High Sierra、Mojave)にインストールされます。私が知る限り、現在の答えはどれもそれをしていません(*)。
開発者として、私はいくつかのJDKを使用していますが、一方から他方に簡単に切り替えたいと思います。通常、私は一般的な使用のための最新の安定したものと、テストのための他のものを持っています。しかし、私はシステムを(たとえば、IDEを起動したとき)私が今持っている最新の「早期アクセス」バージョンを使用したくないのです。システムのデフォルトを制御したいのですが、それは最新のものでなければなりません。
次のアプローチは、Java 7 to 12で少なくとも動作します(この記事の執筆時点での早期アクセス)、 Oracle JDKまたはOpenJDK( 2018年10月中旬以降に作成されたAdoptOpenJDKによるビルド ) 。
/Library/Java/JavaVirtualMachines
の下のデフォルトの場所に残します。システムはデフォルトで最高バージョンを選択します。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でも同じですが、すべてがクールですが、環境変数が変更されるだけなので、制限は同じです。
上記の答えに加えて、私は.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)
/ 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 $@`
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
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
これは少しややこしいですが、 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を永続的に含めることができます。
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
tl; dr
次の行を追加してください。
export Java_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
ファイルへ
~/.bash_profile
ダウンロードしたバージョンに置き換えます。
それからsource ~/.bash_profile
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
}
これをあなたの〜/ .profileに入れてsetjdk 1.8
、setjdk 1.7
、setjdk 9
などのようにあなたの端末で使用してください。
あなたがremoveFromPath
を持っていないならそれはそれです:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
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
アップルの公式の/ 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`
それでもまだuはそれを設定することができません。このコマンドを使用してください。
export Java_HOME = /usr/libexec/Java_home -v 1.8
それならあなたはこれを使わなければなりません。
export Java_HOME = $(/usr/libexec/Java_home -v 1.8)
それはきっとうまくいくでしょう。
最初に環境変数をどこに格納しているのか調べてください。
環境変数を設定する手順: -
ファイルに環境変数を設定します。
a。 emacs.profileの場合は、この link ORを使用できます
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のバージョンをアップグレードしたりグレードを下げることができます。
私は上記の@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;
}
$ 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)
$ 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)
あなたが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
@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
これが私のやり方です Linux (Ubuntu/Mint mate) 、私はMacでも同じようにできると思います。
ステップ:
/mnt/star/program/Java/jdk-1.8
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
Java -version
は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
jv8
jvd
_E_Java_HOME_D
で表されます。jv
出力例:
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:~$
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
).
次のコマンドを~/.zshenv
ファイルに追加してください
export Java_HOME=`/usr/libexec/Java_home -v 1.8`
複数のバージョンがあり、特定のバージョンを使用して何かを実行したい場合は、この例を使用してください。
/usr/libexec/Java_home -v 1.7.0_75 --exec Java -jar you-file.jar
/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_home
はMatching Java Virtual Machines
の下にJDKをリストします、そして上で説明されるようにそれを選択することができます。
このツールはあなたのために仕事をします:
http://www.guigarage.com/2013/02/change-Java-version-on-mac-os/ /
これは、現在のJavaバージョンを定義するために使用できる単純なJavaOneです。バージョンは、ツールでバージョンが選択された後に開かれるシェルで使用できます。