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メソッドの実行コマンドは「モジュール名/クラス名」となる。