MacでJavaのデフォルトバージョンを変更するにはどうすればよいですか?
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)
export JAVA_HOME…
シェルのinitファイルに行を追加します。
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
魚の場合(ormurinによる記述)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
ラインをバッククォートしています
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
で機能します-また、java_homeは部分一致を許可するため、最新バージョンがインストールされているため、完全版を含める必要はありません。これにより、更新が容易になります。
この回答は対処するための試みです。macOSEl Capitan以降(Sierra、High Sierra、Mojave)に開発目的でJDKの複数のバージョンがインストールされている場合に、システム全体(現在実行中のシェルだけでなく)のJavaバージョンを制御する方法です。私の知る限りでは、現在の回答はどれもそれを行いません(*)。
開発者として、私はいくつかのJDKを使用しており、一方から他方に簡単に切り替えたいです。通常、私は最新の安定したものを一般的な使用のために、他のものをテストのために持っています。しかし、私はシステム(たとえば、IDEを起動したとき)が、現在持っている最新の「早期アクセス」バージョンを使用したくありません。システムのデフォルトを制御したいのですが、それは最新の安定版でなければなりません。
次のアプローチは、少なくともJava 7から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についても同じですが、すべてクールですが、私が知る限り、単に環境変数を変更するだけなので、同じ制限があります。
jenv
ないため、これが私が探していた答えJAVA_HOME
です。
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
。どうやら、これは新しい[設定]ペインが起動するものです-これが私のソリューションで見つけた唯一の例外です: Thingは引き続きJDK9(私がインストールした最新のもの)を使用しますが、他のJavaアプリケーションは使用しません。
上記の回答に加えて、次の行を私の.bash_profile
(または.zshrc
MacOS 10.15以降の場合)に入れます。これにより、切り替えが非常に便利になります(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)
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"
してから入力j10
すると、現在のバージョンのJava(私の場合はJava 10)に戻すことができます
nvm
Javaのバージョンを切り替えるのと同じようなcliツールを作成しますが、頭字語はjvm
すでに別の意味を持っています:)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
/ 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
}
次に、Javaを切り替えるには、次のようにします。
$> jhome #switches to latest java
$> jhome -v 1.7 #switches to java 1.7
$> jhome -v 1.6 #switches to java 1.6
export JAVA_HOME=(/usr/libexec/java_home $argv)
2行目の代わりに、私は書く必要がありましたjhome
。
これは少しトリッキーですが、Installing Java on OS X 10.9(Mavericks)で説明されている手順に従ってください。基本的に、エイリアスをに更新する必要がありますjava
。
ステップバイステップ:
JDK 1.7をインストールした後sudo ln -snf
、リンクをcurrentに変更するためにを実行する必要がありますjava
。これを行うには、ターミナルを開いて次のコマンドを発行します。
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を永続的にターミナルに含めることができます
JAVA_HOME
は現在のターミナルセッションでエクスポートされます。.bashrc
必要に応じて追加できます。コマンドを最新バージョンに適合させます。
jenvを使用すると簡単です。
1. jenvをインストールする
curl -s get.jenv.io | バッシュ
2. config jenv
cd〜/ .jenv / candidates / mkdir java CD Java mkdir 1.7 mkdir 1.8
3. jdkパスのシンボリックリンク
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin〜/ .jenv / candidates / java / 1.7 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin〜/ .jenv / candidates / java / 1.8
4.これで準備は完了です
スイッチコマンド:
jenvはJava 1.8を使用します
デフォルトに設定:
jenvデフォルトJava 1.7
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はあなたが記入できる空白のページを表示します。
ドキュメントに追加:
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
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
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:?;;")
}
デフォルトのプロセスを使用する人のためのターミナルを使用した4つの簡単なステップ.. :)
echo $JAVA_HOME
現在のjavaホームを提供します。たとえば:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
uが通常jdksをインストールするフォルダに移動します(マシンによって異なる場合があります)
ls
ショーあなた可能なフォルダ(通常は、それは例えばのために、バージョン番号を持つことになります。jdk1.8.0_191.jdk openjdk-11.0.2.jdk
)export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'
Javaホームを変更します。MacOSのエル・キャピタン以降は、JDK利用可能で、より高いバージョンを選択します/Library/Java/JavaVirtualMachines
ので、ダウングレードするために、あなたはファイル名を変更することがあり、Info.plist
のような何か他のものにInfo.plist.disabled
OSが以前のバージョンを選択するように。
Appleの公式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が設定できない場合。このコマンドを使用します。
JAVA_HOME =をエクスポートする/usr/libexec/java_home -v 1.8
次に、これを使用する必要があります。
JAVA_HOME =をエクスポートする$(/usr/libexec/java_home -v 1.8)
それはきっとうまくいくでしょう。
まず、環境変数をどこに保存しますか?
環境変数を設定する手順:-
ファイルに環境変数を設定します
a。emacs.profileあなたは、この使用することができますリンクを以下のスクリーンショットを参照してください
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
複数のバージョンがあり、特定のバージョンを使用して何かを実行したい場合は、次の例を使用します。
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
@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
上記で定義され
ているデフォルトのJavaバージョンに切り替えます。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
。
別にインストールされたJDKをのリストに含める簡単な方法は、/usr/libexec/java_home -V
次のようにディレクトリをシンボリックリンクすることです。
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
JDKがリストされ、Matching Java Virtual Machines
上記のように選択できます。
私はローカルターミナルのためにそれをしました
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
このツールはあなたのために仕事をします:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
これは、現在のJavaバージョンを定義するために使用できる単純なJavaOneです。バージョンは、ツールでバージョンが選択された後に開かれるシェルで使用できます。
あまりに簡単な解決策:なんという頭痛の種でも、これは私にとってはうまくいく迅速で簡単な解決策でした。
Mac OS Sierraバージョン10.12.13
ショートカットキーを使用します。CMD+ SHIFT + G-「/ライブラリ/」と入力します
JAVAフォルダーを見つける
Javaフォルダを右クリック=ゴミ箱に移動(パスワードが必要)
インストール:Java SE開発キット8 jdk-8u131-macosx-x64.dmg | JavaScript SDKをダウンロード
/usr/libexec/java_home
と何がわかりますか?