0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PowerShellでJAVA_HOME切替

Last updated at Posted at 2022-10-17

使用するjavaの切替をコマンドかバッチで切り替えたいと思い作成。

SetEnvironmentVariableで設定した後、環境変数の変更を反映するためにpowershellを起動しなおしてjava -versionとしていたのですが
GetEnvironmentVariableで再読み込みすれば変更を反映できるようなのでスクリプトにしました。

なお、PowerShell ISEで実行するとエラーになります…。(未解決の事象 参照)

環境

Window 10
PSVersion : 5.1.19041.1682

ソース

javaへのPathは、%JAVA_HOME%/bin で通している前提です。

setJAVAHOME.ps1
param(
    [Parameter(Mandatory=$true)]
    [String]$javaVersion
)

# user's setting
$javaPath = @{
    '8'  = 'C:\jdk\openjdk-8'
    '11' = 'C:\jdk\openjdk-11'
}

# check and set
if ($javaVersion -in $javaPath.Keys) {

    echo ''
    echo "set version : $javaVersion"

    # set JAVA_HOME
    [System.Environment]::SetEnvironmentVariable("JAVA_HOME", $javaPath[$javaVersion], "User")

    # reload JAVA_HOME, Path
    $env:JAVA_HOME = [System.Environment]::GetEnvironmentVariable("JAVA_HOME", "User")
    $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" `
              + [System.Environment]::GetEnvironmentVariable("Path","User")
} else {
    echo ''
    echo "input version is invalid!!"
}

# display version
echo ''
echo '---------- java version ----------'
java -version

echo ''

使い方

  1. 変数 $javaPath にバージョン(key)とJAVA_HOMEに設定するパスを設定する。
  2. 引数にバージョンを指定して実行する。

実行例

通常パターン

実行例1
PS > ./setJAVAHOME.ps1 11

set version : 11

---------- java version ----------
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

PS >

引数が間違っている

実行例2
PS > ./setJAVAHOME.ps1 1

input version is invalid!!

---------- java version ----------
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

PS >

引数忘れた

実行例3
PS > ./setJAVAHOME.ps1

コマンド パイプライン位置 1 のコマンドレット setJAVAHOME.ps1
次のパラメーターに値を指定してください:
javaVersion: 11

set version : 11

---------- java version ----------
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

PS >

未解決の事象

Powershellからこのスクリプトを実行した場合は問題なく動いているが、
PowerShell ISEで実行するとエラーになる。

エラー時出力内容
PS C:\nablarch> ./setJAVAHOME.ps1 11

set version : 11

---------- java version ----------
java : openjdk version "11" 2018-09-25
発生場所 C:\nablarch\setJAVAHOME.ps1:33 文字:1
+ java -version
+ ~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (openjdk version "11" 2018-09-25:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

PS C:\nablarch> 
PS C:\nablarch> ./setJAVAHOME.ps1 8

set version : 8

---------- java version ----------
java : openjdk version "1.8.0_42"
発生場所 C:\nablarch\setJAVAHOME.ps1:33 文字:1
+ java -version
+ ~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (openjdk version "1.8.0_42":String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
OpenJDK Runtime Environment (build 1.8.0_42-b03)
OpenJDK Client VM (build 25.40-b25, mixed mode)

PS C:\nablarch>

こちらの記事 PowerShellからのPATH設定がなんかうまくいかない話。 で、
環境変数Pathに環境変数を含むパスを含めるとうまくいかない事象(実験)が書かれているが、
どうやら環境変数Pathに含まれる環境変数の設定値を変更するのもだめらしい。

javaコマンドが認識されていないようで、
スクリプトの実行に限らず、SetEnvironmentVariableで設定した後に
java -version と直接コマンド入力した場合もエラーとなる。

参考

スクリプトを書くときに参考にしたQiitaの記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?