web-dev-qa-db-ja.com

コマンドでJava_HOMEを一時的に変更しても、Windowsで一時的にPATHが変更されない

ユーザーの環境変数でjdk11にJava_HOMEを定義しましたが、PATHには%Java_HOME%/binが含まれています。

Java_HOMEをjdk8に変更して、コマンドプロンプト(cmd)で一時的にjdk8に切り替えたいのですが、pathまたはJava -versionの値は変更されませんcmdの現在のインスタンスでは変更されません。

PS-混乱を避けるために、c:\ Program Data\Oracle\Java ..ファイルを削除しました

2
the1derer

パスの値を変更しないか、Java -versionがcmdの現在のインスタンスで変更されない

cmdシェルが親プロセスから環境を継承するため、変更を有効にするにはcmdを再起動する必要があります。


コマンドラインからJavaバージョンを切り替える正しい方法は何ですか?

次のように、一連のバッチファイルを使用します。

Java開発者である私は、常にコードをコンパイルしてさまざまなJavaバージョンでテストします。ただし、バージョンを切り替えることは大きな問題です。そのため、簡単にこれを行うには、次のバッチファイルを作成し、コマンドラインを開いたディレクトリまたはSYSTEM PATHに配置する必要があります。これらのファイルを作成するには、お気に入りのテキストエディターを使用できます。

jdk14.bat

@echo off
echo Setting Java_HOME
set Java_HOME=C:\j2sdk1.4.2_12
echo setting PATH
set PATH=C:\j2sdk1.4.2_12\bin;%PATH%
echo Display Java version
Java -version

jdk15.bat

@echo off
echo Setting Java_HOME
set Java_HOME=C:\Program Files\Java\jdk1.5.0_12
echo setting PATH
set PATH=C:\Program Files\Java\jdk1.5.0_12\bin;%PATH%
echo Display Java version
Java -version

jdk16.bat

@echo off
echo Setting Java_HOME
set Java_HOME=C:\Program Files\Java\jdk1.6.0_11
echo setting PATH
set PATH=C:\Program Files\Java\jdk1.6.0_11\bin;%PATH%
echo Display Java version
Java -version

Javaインストールに従って、バッチファイルで適切なJava_HOME値を割り当ててください。Javaバージョンを切り替える場合は、それぞれのバッチファイルを実行すると完了です。

注:Java_HOMEおよびJavaへのパスは常にまったく同じバージョンのJDKを参照する必要があります。それらを混同すると、予測できないことが起こります!

ソース Windowsでの異なるJDKバージョン間の切り替え| Oracle Pranavのブログ

6
DavidPostill

これは、PATHへの代入時にPATHの変数参照が展開され、それ以降の変更は無視され、元の値への参照が失われるためです。これは、変数への参照を作成するのではなく、変数の値のコピーを作成するようなものです。

set Java_HOME=C:\dir1
PATH=%Java_HOME%
set Java_HOME=C:\dir2
PATH

これは、C:\dir1ではなくJava_HOME(割り当て時の%Java_HOME%の値)を出力します。

Java_HOMEへの変更後に呼び出すには、次のようなスクリプトが必要です。

PATH=%Java_HOME%;C:\Windows\system32;C:\Windows;...
0
RalfFriedl