読者です 読者をやめる 読者になる 読者になる

ITお絵かき修行

3歩歩いても忘れないために

JavaDayTokyo2016メモ【2-A: Project Jigsawではじめるモジュール開発】

JavaDayTokyo2016に参加した。
下記セッションに参加したので、参加メモを書いておく。
※正確な情報・見解は後日公開される(であろう)登壇者のスライドや公式資料等を参照のこと。
www.oracle.co.jp

[2-A: Project Jigsawではじめるモジュール開発]

Java in the Box 櫻庭 祐一 氏

【概要】

Project Jigsawの導入背景、モジュールの作成方法・使用方法の紹介

【内容】

1.導入背景

(1)現状
・現在のJavaには「クラスパスが複雑」「rt.jarの肥大化」という2つの課題を抱えている。
・上記に関連し、「JAR HELL」と呼ばれるような.jarファイル間の依存関係の複雑さも発生している。

(2)(1)の原因
・クラスパス・JARのパッケージング機構における、
「依存関係」「バージョン」「公開範囲」をコントロールする仕組みが不足しているため。
・特にクラスのpublic属性のアクセス範囲が広すぎることが大きな原因とみられている。
 →『public is TOO public』

(3)歴史
・2005年頃から提言はされていた。
・JSR277、JSR294といったJSRを経てProject Jigsawが発足し、Java9で採用。

2.モジュールの作成

・モジュールを作成する際の定義内容は以下の3要素。

Module extends JAR{
    dependency …「依存関係」
    export   …「公開範囲」
    version   …「バージョン」 ※バージョンに対応する仕組みはまだない。今後どうなるか不明とのこと。
}

・モジュールはJARの拡張。JARと同じくクラスパスに追加しクラスを読み込ませることは可能。

・今までのpublicクラスは誰からでもアクセス可能だった。これからの(※モジュール内の)publicクラスは、公開範囲に対応するクラスからしかアクセスできなくなる。
 →今後はmainメソッドを含むクラスを明示的に公開しないと、アプリが起動できなくなる。

・モジュールの定義内容は「modules-info.java」に記述する。「modules-info.java」は「src」フォルダ直下に置く。(※読み込み効率、複数ファイル対応etcの為)
例:modules-info.java

module fxdemo {
    requires javafx.controls;
    requires javafx.graphics;
}
3.モジュールの使用

(1)コンパイル
・jarコマンドに「--create」などのオプションを付与して実行する。tarっぽいらしい。

(2)実行
・実行時はオプションを指定して実行する。
 「モジュールのみ使用」「モジュールとクラスパス」といった使い方が可能。
例:実行コマンドの先頭部

java -mp mods -addmods ・・・

・mainメソッドの実行コマンドは「モジュール名/クラス名」となる。

4.MISC about Module

・「jdeps」…自分たちでモジュール(modules-info.java)を作成する際に使用できるツール。クラス、jarファイルの依存関係を出力できる。
・「jlink」…JREのカスタマイズが可能となるツール。組み込み用のライブラリのみ抜き出す、コアライブラリのみ抜き出すといったことが可能となる。


[感想など]
・モジュールを使った構成管理のプロセスが、antやGradleといったビルドツールで実現可能なのかが気になった。
・発表資料は毎回JavaFXで作成されているとのこと。