[01] PowerShell実践例 ... OpenJDK のインストーラを作ろう



|本シリーズのトップページ|
|:--|
|https://qiita.com/robozushi10/items/0b0605257ad39bc22895|


# はじめに

Windows 用の OpenJDK にはインストーラが存在しない.
とはいっても、手動でインストールする操作自体は単純である.

Windows PC で CI/CD をさせる際に OpenJDK のインストール自動化が必要になったので書き残しておく.

　

# 環境

```
Windows 10 Pro
PowerShell バージョン 6系
```

　

# 詳細

今回は、OpenJDK 15.0.1 をインストールする場合を例にする.
なお、手順の流れとしては次の 1〜 である.

```
1. OpenJDK 15.0.1 の Zip ファイルを Oracle のページから Download してくる.
2. 上記 1 で入手した Zip ファイルを展開(unzip)する
3. 展開(unzip) したデータを、ローカルのディスク (例: C:\OpenJDK-15.0.1\) に配置する
4. システム環境変数 JAVA_HOME に「上記 3 で配置したパス」を記す
5. システム環境変数 Path に「上記 3 で配置したパス + /bin」を記す
```

# 先に結論から

必須処理のみを書き出すと次のようになる.
これで OpenJDK 15.0.1 のインストールが完了する.
コードの処理の詳細は[後述](#解説)している.

```powershell
## URL を変数 $RJDK に格納する
$RJDK = 'https://download.java.net/java/GA/jdk15.0.1/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/openjdk-15.0.1_windows-x64_bin.zip'

## Invoke-WebRequest が curl に該当する
Invoke-WebRequest -Uri $RJDK -OutFile openjdk-15.0.1.zip

## Expand-Archive はあらゆる圧縮データを展開するコマンドである.
## Linux での xdg-open が該当する
Expand-Archive openjdk-15.0.1.zip

## Cドライブ直下に「openjdk-15.0.1」というフォルダ名でコピーする
Copy-Item -Force -Recurse openjdk-15.0.1_windows-x64_bin C:\openjdk-15.0.1

## bash で例えると export JAVA_HOME="C:\openjdk-15.0.1" ということ
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\openjdk-15.0.1", "Machine")

## 既存の $Path を取り出す
$CUR = [System.Environment]::GetEnvironmentVariable("Path", "Machine")

## システム環境変数「Path」の先頭を「C:\openjdk-15.0.1\bin」にして、変数 $NEXT に格納する
$NEXT = "C:\openjdk-15.0.1\bin;$CUR"

## システム環境変数「Path」を変数 $NEXT で上書きする
[System.Environment]::SetEnvironmentVariable("Path", $NEXT, "Machine")
```


## 解説

以下 1〜6 は、PowerShell ウインドウでの操作である.

### 1. 入手したい JDK の在処を記す

```powershell
## URL を変数 $RJDK に格納する
$RJDK = 'https://download.java.net/java/GA/jdk15.0.1/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/openjdk-15.0.1_windows-x64_bin.zip'
```

### 2. curl を使って 1 をダウンロードする

ダウンロードした際のファイル名を `openjdk-15.0.1.zip` とする

```powershell
## Invoke-WebRequest が curl に該当する
Invoke-WebRequest -Uri $RJDK -OutFile openjdk-15.0.1.zip
```

### 3. 上記 2 で取得した openjdk-15.0.1.zip を展開する

`openjdk-15.0.1.zip` を展開する.

```powershell
## Expand-Archive はあらゆる圧縮データを展開するコマンドである.
## Linux での xdg-open が該当する
Expand-Archive openjdk-15.0.1.zip
```

### 4. Cドライブ直下にフォルダ「openjdk-15.0.1」を複製する

上記 3 を実行するとフォルダ「`openjdk-15.0.1_windows-x64_bin`」が作成されている.

このフォルダを「`C:\openjdk-15.0.1`」として複製する

```powershell
## Cドライブ直下に「openjdk-15.0.1」というフォルダ名でコピーする
Copy-Item -Force -Recurse openjdk-15.0.1_windows-x64_bin C:\openjdk-15.0.1
```

### 5. システム環境変数として「JAVA_HOME」を「c:\openjdk-15.0.1」として上書き定義する

次の要領で実行する. 完了までに 30秒くらい要することもある.

```powershell
## bash で例えると export JAVA_HOME="C:\openjdk-15.0.1" ということ
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\openjdk-15.0.1", "Machine")
```

### 6. システム環境変数「Path」の先頭に「C:\openjdk-15.0.1\bin」を追加する

次の要領で実行する. 完了までに 30秒くらい要することもある.

```powershell
## 既存の $Path を取り出す
$CUR = [System.Environment]::GetEnvironmentVariable("Path", "Machine")

## システム環境変数「Path」の先頭を「C:\openjdk-15.0.1\bin」にして、変数 $NEXT に格納する
$NEXT = "C:\openjdk-15.0.1\bin;$CUR"

## システム環境変数「Path」を変数 $NEXT で上書きする
[System.Environment]::SetEnvironmentVariable("Path", $NEXT, "Machine")

```

上記 1 から 6 を連結させれば PowerShell スクリプトの完成である.
　

以上.