エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

java9 Jigsaw 試し実装

きっかけ

Java Day Tokyo 2017, JJUG CCC Spring 2017 に出て、そろそろJigsawをキャッチアップしねぇと不味いなと感じ、とりあえず触ってみた。

環境情報

Microsoft Windows [Version 10.0.15063]

javaのバージョン

>java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+171)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+171, mixed mode)

コンパイラのバージョン
必要かどうか迷ったが、最初に入れたときにコンパイラバージョンがJava8のままで、module-info.javaが怒られて、結構迷うという恥ずかしい事態になったので、気付きの観点で載せる。

>javac -version
javac 9-ea

実験

公式サイトのクイックスタートガイド

Project Jigsaw: Quick Start Guide

自分は、Greetings worldからはじめました。

Greetings world

やっていることは、org.astroっていうモジュールを作って外部公開し、それをcom.greetingsで利用しているだけ。

src/org.astro/module-info.java
src/org.astro/org/astro/World.java
src/com.greetings/com/greetings/Main.java
src/com.greetings/module-info.java

$ cat src/org.astro/module-info.java
module org.astro {
    exports org.astro;
}

$ cat src/org.astro/org/astro/World.java
package org.astro;
public class World {
    public static String name() {
        return "world";
    }
}

$ cat src/com.greetings/module-info.java
module com.greetings {
    requires org.astro;
}

$ cat src/com.greetings/com/greetings/Main.java
package com.greetings;
import org.astro.World;
public class Main {
    public static void main(String[] args) {
        System.out.format("Greetings %s!%n", World.name());
    }
}

一番注目するべきは、src/org.astro/module-info.javaと、src/com.greetings/module-info.javaの内容。
exportsで外部公開。requiresで依存関係を宣言している。
そして、module-info.java以外は、Java8以前のものと一緒。
覚えなければ行けないのは、module-info.javaだけみたい。

実行方法

出力先のディレクトリを作成

自分windowsでやってたので、意図を汲み取ってディレクトリを作成。たぶん、macなら下記コマンドでいけるハズ。

$ mkdir mods/org.astro mods/com.greetings

org.astroをコンパイル

$ javac -d mods/org.astro src/org.astro/module-info.java src/org.astro/org/astro/World.java

com.greetingsをコンパイル

注目すべきは、--module-pathでモジュールを含むディレクトリを宣言しているところ。
指定はしなくてもいいんだね。

$ javac --module-path mods -d mods/com.greetings src/com.greetings/module-info.java src/com.greetings/com/greetings/Main.jav

実行

java --module-path mods -m com.greetings/com.greetings.Main

感想

とりあえず、やりたきことは確認できた。
覚えなければならないことは、module-info.javaの記述方法と、コンパイル&実行方法だけみたいだね。
今回はサンプルのローカル確認で終了したが、次は自分で作ったソースでやれることを確認したい。

参考サイト

Project Jigsaw: Module System Quick-Start Guideをテキトーに訳した - kagamihogeの日記