倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

32bit Windows マシンに Java 10 をインストールする

以前の記事『32bit Windows マシンに Docker CE をインストールする - 倭マン's BLOG』で、32bit Windows マシンに Docker CE をインストールする方法を見ましたが、Docker と同じように 64bit マシンでしか動かない Java 10 を、同様の方法を使って Vagrant仮想マシンにインストールする方法を見ていきます。 まぁ、Java のインストール自体は wgetアーカイブ(tar.gz ファイル)をダウンロードして解凍してるだけなんですけど。

【この記事の内容】

使用するツール

使用するツールは『32bit Windows マシンに Docker CE をインストールする - 倭マン's BLOG』でのものと同じく、仮想マシンを動かす Vagrant + VirtualBox と、GitHub リポジトリをクローンする Git for Windows です。 VagrantVirtualBox は最新版ではなく少し古いバージョンを使います*1

各ツールのインストール方法等はそれぞれのサイトを参照してください。 Windows 用のインストーラーが付いてますが。

Java 10 のインストール方法

GitHub - waman/java10-vagrant』に Java 10 をインストールする Vagrantfile やプロビジョニングスクリプトを置いてあるので*2、インストールは簡単。 適当なディレクトリ上で GitBash (Git for Windows に付属)を起動して以下のコマンドを順次実行します*3

$ git clone https://github.com/waman/java10-vagrant.git
$ cd java10-vagrant
$ vagrant up

インストールに成功していればJDK のライブラリ(?)が展開されてるので、「vagrant ssh」で仮想マシンにログインして、「java -version」で java のバージョンを確認してみましょう:

$ vagrant ssh
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-116-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


vagrant@ubuntu-xenial:~$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

以上のように表示されれば、Java 10 のインストールが正常に行われたことが確認できます。 仮想マシンからログアウトしたい場合は「exit」コマンドを実行するだけで OK です。

自分の環境ではしばしば「vagrant up」に失敗してしまうのですが、そんな場合は「vagrant destroy --force」で仮想マシンを破棄してからもう一度「vagrant up」しましょう。 何度も失敗するようなら、別に起動しているアプリケーションを終了したり、VirtualBoxGUI を開いて無駄に起動している仮想マシンを停止・除去したりしてください。 Vagrantfile で VirtualBox のメモリ確保設定などを追加したりするといいのかも知れませんが、詳細が分からない・・・

Java 10 を使ってみる

Java 10 のインストールに成功したら、実際に使ってみましょう。 今回は Gradle などのビルドツールをインストールしていないので、javac/java コマンドでコンパイル・実行(久し振りにやると使い方が分からん)する方法と、Java 9 から導入された JShell を使う方法を試してみます。

javac/java コマンド
ホストマシンの java10-vagrant ディレクトリ下に作成される src ディレクトリは、仮想マシン上のディレクトリと同期される共有フォルダなので(仮想マシン上の /home/vagrant/src ディレクト*4と同期される)、ソースコードはここに配置します。 ここでは以下のような内容の Java 10 のソースコードを作成したとします:

// src/Main.java
public class Main{

    public static void main(String... args){
        var s = "Hello, world!";
        System.out.println(s);
    }
}

ローカル変数の宣言に「var」を使っているので Java 10 特有のコードになってます。

これをコンパイルして実行するのですが、クラスファイルの類は共有フォルダに置かない方がよいので classes ディレクトリに出力するようにします:

vagrant@ubuntu-xenial:~$ javac -d classes src/Main.java
vagrant@ubuntu-xenial:~$ java -cp classes Main
Hello, world!

まぁ、特に問題なく実行されました。

JShell
そういえば Java 9 から JShell が導入されたので、こちらも試してみましょう。 仮想マシン上で「jshell」コマンドを実行すれば JShell が起動します:

vagrant@ubuntu-xenial:~$ jshell
Mar 21, 2018 7:43:07 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
|  Welcome to JShell -- Version 10
|  For an introduction type: /help intro

jshell> var s = "Hello, world!"
s ==> "Hello, world!"

jshell> System.out.println(s)
Hello, world!

jshell> /exit
|  Goodbye

こちらでも変数宣言で「var」が使えてますね。 よしよし。

少し Vagrant について
これは単なる普通の Vagrant の使い方なのですが、仮想マシンを停止したい場合は「vagrant suspend」コマンドもしくは「vagrant halt」コマンドを実行しましょう(違いは Vagrant のドキュメントなどを参照)。 完全にアンインストールしたい場合は「vagrant destroy --force」コマンドを実行して下さい*5

別の仮想マシンを作って Java 10 をインストールしたい場合は、『32bit Windows マシンに Docker CE をインストールする - 倭マン's BLOG』にある「ボックスにまとめる」方法も使えます。

Oracle JDK を使う

上記の方法では、JDK のダウンロードを自動化するために OpenJDK を使っていたのですが、オラクルの JDK を手動でダウンロードしておけば Oracle JDK を使うこともできます。 Oracle JDK

からダウンロードできますが、ライセンスに同意して「Accept License Agreement」にチェックを入れる必要があります(Windows 用ではなく Linux 用のアーカイブの tar.gz ファイルをダウンロードしてください)。

OpenJDK の代わりに Oracle JDK をインストールしたい場合は、上記の方法で GitHubリポジトリをクローンした後で java10-vagrant ディレクトリ下に「archiveディレクトリを作成して、そこにダウンロードした Oracle JDKアーカイブ (jdk-10_linux-x64_bin.tar.gz) を配置し*6、「vagrant up」を実行します。 インストールが完了したあとで上記と同様に仮想マシンにログインして Java のバージョンを表示させると以下のようなメッセージが表示されるはずです:

vagrant@ubuntu-xenial:~$ java -version
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)

RI (Reference Implementation) の場合は OpenJDK と同じメッセージが表示されたんですが、正式リリースではきちんと OpenJDK とは別のメッセージが表示されました。

まとめ

Java 9 以降は 64bit マシンでしか Java が使えなくなってしまいましたが、仮想環境を構築すれば一応はインストールして動かすことは可能なようです。 まだ試している途中ですが、Gradle のようなビルドツールも同じようにインストールすることができそうです。 問題は IDE を使ってどのように開発するかあたりですね・・・ VimEmacs のようなエディタを使えるようになるのが一番いい気がしますが。

【追記・修正】

  • Vagrantfile などを置いている GitHub へのリンクが切れていたので修正しました。
  • 記事を書いた次の日に RI (Reference Implementation) が出てたので、EA (Early-Access) からそちらを使うように変更しました。
  • RI が出た次の日に正式リリース(OpenJDK は GA リリース)が出てたので、そちらを使うように変更しました。
  • JShell 部分などを追記しました。

入門bash 第3版

入門bash 第3版

*1:自分の環境では最新版がきちんと動かなかったため。

*2:正直、Bash に関しては完全なシロートなので、プロビジョニングスクリプトは「とりあえず自分の環境では動いた」ってレベルのコードですm(_ _)m Bash も一度基本から勉強した方がいいかなとは思いつつ・・・

*3:最初の「$」は入力不要。 念のため。

*4:vagrant ssh」でログインすると /home/vagrant ディレクトリに入るので、その直下の src ディレクトリが仮想マシン上の共有フォルダとなっています。

*5:--force オプションがなければ yes/no を聞かれるだけです。

*6:OpenJDK のアーカイブ openjdk-10_linux-x64_bin.tar.gz などが存在している場合は削除しておいてください。 OpenJDK を自動ダウンロードした場合に、ここにアーカイブを配置するようにしています。 この archive ディレクトリはホストマシンと仮想マシンの間で同期をとる共有フォルダにしてあるので、アーカイブを配置するのはちょっと抵抗があるのですが・・・ インストールに成功したらアーカイブファイルは削除しておいてもいいかも知れません。