倭マン's BLOG

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

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

前回の記事『32bit Windows マシンに Java 10 をインストールする - 倭マン's BLOG』で、32bit Windows マシンに Java 10 をインストールする方法を見ましたが、ビルドツールをインストールしていなかったので手動でコンパイルしていました(【追記】したように、JShell を使う分にはちょうどよいかと思いますが)。 今回は、Java 10 に加えてビルドツールの Gradle もインストールするようにします。 Gradle のインストール自体は wgetアーカイブ(zip ファイル)をダウンロードして、unzip で解凍してるだけですが。

【この記事の内容】

使用するツール

使用するツールは前回と同じく、Vagrant + VirtualBox と Git for Windows です:

Java 10 + Gradle のインストール方法

Java 10 + Gradle をインストールする Vagrantfile 等も、前回の Java 10 をインストールするものと同じく『GitHub - waman/java10-vagrant』に置いています。 gradle ブランチとして作成しているので、clone するときにこのブランチの指定をする必要がありますが、それ以外は前回と同じです:

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

Gradle のアーカイブが展開されればインストールが完了してるので、「vagrant ssh」で仮想マシンにログインして、「java -version」で Java のバージョンを、「gradle -version」で Gradle のバージョンをそれぞれ確認してみましょう*1

$ 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)

vagrant@ubuntu-xenial:~$ gradle -version
...
------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          10 ("Oracle Corporation" 10+46)
OS:           Linux 4.4.0-116-generic amd64

gradle -version」を実行するといくつか警告が表示されますが、ここでは無視。

Java 10 + Gradle を使ってみる

Java 10 と Gradle のインストールに成功したら、実際に使ってみましょう。 ホームディレクトリ /home/vagrant 下に作成されている project ディレクトリが共有フォルダ(ホストマシンと仮想マシン間で同期をとられているディレクトリ)に設定されているので、そのディレクトリに Gradle プロジェクトを作ります:

vagrant@ubuntu-xenial:~$ cd project
vagrant@ubuntu-xenial:~/project$ gradle init --type java-application
Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 25s
2 actionable tasks: 2 executed

このままビルドを行ってもいいのですが、Java 10 が使えるようになっていることを確かめるために、src/main/java ディレクトリ下の App.java を以下のように少し修正しおきます(共有フォルダ下のファイルなのでホストマシン上で編集可):

public class App {
    public String getGreeting() {
        return "Hello world.";
    }

    public static void main(String[] args) {
       // 以下が修正箇所。 Java 10 で導入された「var」を使用。
        var s = new App().getGreeting();
        System.out.println(s);
    }
}

この修正の後、「gradle run」で実行すると以下のように「Hello world.」と表示されるはずです(表示内容は一部変更しています):

vagrant@ubuntu-xenial:~/project$ gradle run
Starting a Gradle Daemon (subsequent builds will be faster)
...

> Task :run
Hello world.


BUILD SUCCESSFUL in 57s
2 actionable tasks: 2 executed

Java 10 のコードも問題なくコンパイルできました。

クラスファイルを非共有フォルダに出力する

Vagrant の共有フォルダにはソースファイル等だけを置き、クラスファイルの類のものは置かないのがパフォーマンス的にいいのですが、上記のインストール方法では、デフォルトでプロジェクト全体を共有フォルダに配置するようになっています。 正直、Vagrant 側で共有フォルダの細かな設定方法がよく分からないので*2、Gradle 側でクラスファイルの出力先を変更する仕方を載せておきます。

Gradle ではクラスファイルの出力先は sourceSets によって指定できます。 出力先を例えば /tmp/classes ディレクトリにしたい場合には、以下のような設定を build.gradle に追加します:

// build.gradle に追加
sourceSets {
  main.java.outputDir = file('/tmp/classes/java/main')
  test.java.outputDir = file('/tmp/classes/java/test')
}

クラスファイルの出力先を一括して変更する設定方法がある気もしますが・・・

Gradle の他のバージョンを使う

前回の JDK の場合と同じく、Gradle も他のバージョンのアーカイブを手動でダウンロードして archive ディレクトリに配置しておけば、そちらを優先してインストールします。 Gradle の古いバージョンは

からダウンロードできます。

現在のデフォルトでは Gradle 4.6 がインストールされますが、インストールを実行するとそのアーカイブ上記の archive ディレクトリに配置されるので、別バージョンの Gradle をインストールしたい場合はそのアーカイブを削除しておいてください。

まとめ

Gradle のインストールはアーカイブをダウンロードして展開するだけなので、インストール自体は簡単ですね。 最近あまり Gradle を触っていなかったのですが、Gradle プロジェクトの生成も 「gradle init 」で簡単にできるようになっていていいですね。 問題は Groovy の凋落が甚だしいところかな(笑) 最近は Kotlin プロジェクトのビルドで Gradle 自体は脚光を浴びている感じですが、Ruby を知らずに Vagrant を書くのに似た暗中模索感がなんとも言えない・・・
Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築

*1:Java や Gradle のアーカイブが展開されずエラーメッセージが表示されて終了したら、「vagrant destroy --force」で仮想マシンを破棄して再度「vagrant up」してみましょう。 何度も失敗するようなら、起動している他のアプリケーションを終了したり、VirtualBoxGUI から起動している他の仮想マシンがないか確認して、あれば停止/除去してから再度「vagrant up」しましょう。

*2:Gradle プロジェクト全体を共有フォルダにすると build/classes ディレクトリを非共有フォルダに指定できない、src ディレクトリを共有フォルダにしても build.gradle を共有できない、Jar ファイル等の成果物は build ディレクトリ下でも共有したい、マルチプロジェクトでは自動設定は絶望的、などの理由で、プロビジョニングによる自動設定は諦めました。