Copyright©2017 NTT corp. All Rights Reserved. Project Jigsaw 2017年10月28日 JavaOne 2017報告会 in 大阪 NTT OSSセンタ 久保田 祐史
Copyright©2017 NTT corp. All Rights Reserved.
Project Jigsaw
2017年10月28日JavaOne 2017報告会 in 大阪NTT OSSセンタ 久保田 祐史
2Copyright©2017 NTT corp. All Rights Reserved.
•本セッション内容は公開されます
•資料はダウンロードできます。ざっくりですがノートに原稿も記載しています
• https://www.slideshare.net/YujiKubota/
•再アップロードできなくなったので一覧から…
•Twitterで #kanjava を付けて呟いて下さい
•難聴者の方などが理解する助けになります!
情報保障
3Copyright©2017 NTT corp. All Rights Reserved.
•KUBOTA Yuji (@sugarlife)
• Java (OpenJDK) サポート担当
•OpenJDKバリバリ利用中
•OpenJDKコントリビュートしたりJavaOneやJJUGで喋ったり
•WEB+DB v101で記事書きました
•NTT OSSセンタ
•NTTグループのOSS活用を支える部隊
•Kernel, PostgreSQL, Pacemaker, Tomcat, OpenJDK, and so on.
•各種コントリビューター揃えております
Who I am
4Copyright©2017 NTT corp. All Rights Reserved.
HeapStats
5Copyright©2017 NTT corp. All Rights Reserved.
Project Jigsaw
6Copyright©2017 NTT corp. All Rights Reserved.
•JAR HELL
•依存性が複雑怪奇
•標準ライブラリ
•巨大かつ分割不可
Project Jigsaw
7Copyright©2017 NTT corp. All Rights Reserved.
•紛失したライブラリはどれ?•コンフリクトはどこで発生?
•依存性を定義できないのが問題
•内部 API を安全に変更できる?•Public が Public 過ぎる
•公開範囲を設定できないのが問題
•解決策: Module の導入
依存性が複雑怪奇
8Copyright©2017 NTT corp. All Rights Reserved.
:
com.foo.driver….
com.foo.controller…
:
com.hoge.dog…
com.hoge.cat …
JAR
:
com.foo.driver….
com.foo.controller…
:
com.hoge.dog…
com.hoge.cat …
JAR
Module
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
:
com.hoge.inu…
com.hoge.neko…
:
com.moge.dog…
com.moge.cat…
JAR
9Copyright©2017 NTT corp. All Rights Reserved.
Module
com.moge.dog…
com.moge.cat…
: Module
com.hoge.inu…
com.hoge.neko…
: Module
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
10Copyright©2017 NTT corp. All Rights Reserved.
Module
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
11Copyright©2017 NTT corp. All Rights Reserved.
Module
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
12Copyright©2017 NTT corp. All Rights Reserved.
Module
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
module-info.java
13Copyright©2017 NTT corp. All Rights Reserved.
Module
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
module-info.java
14Copyright©2017 NTT corp. All Rights Reserved.
Module
module com.foo.bar {
}
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
module-info.java
15Copyright©2017 NTT corp. All Rights Reserved.
Module
module com.foo.bar {//依存するモジュール
requires com.foo.baz;requires java.sql;
}
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
module-info.java依存性
16Copyright©2017 NTT corp. All Rights Reserved.
Module
module com.foo.bar {//依存するモジュール
requires com.foo.baz;requires java.sql;//公開するパッケージ to 公開先
exports com.foo.bar.alpha;exports com.foo.bar.beta to
com.foo.ok;
}
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.internal.Internal
Module
module-info.java依存性可視性
17Copyright©2017 NTT corp. All Rights Reserved.
Module
com.foo.bar
java.sql
com.foo.
internal
com.foo.bar.
alpha
java.logging
com.foo.baz
readscom.foo.app
com.foo.bar.
beta
com.foo.ok
::
::
module com.foo.bar {//依存するモジュール
requires com.foo.baz;requires java.sql;//公開するパッケージ to 公開先
exports com.foo.bar.alpha;exports com.foo.bar.beta to
com.foo.ok;
}
requires
18Copyright©2017 NTT corp. All Rights Reserved.
標準ライブラリもModule化
19Copyright©2017 NTT corp. All Rights Reserved.
依存性の確認
# jdeps -s heapstats-core.jarheapstats-core.jar -> java.base
heapstats-core.jar -> java.logging
heapstats-core.jar -> java.xml.bind:
heapstats-core.jar -> javafx.graphics
# jdeps –-generate-module-info . heapstats-core.jarwriting to ./heapstats.core/module-info.java
# cat ./heapstats.core/module-info.javamodule heapstats.core {
requires java.logging;requires java.xml.bind;
:
exports jp.co.ntt.oss.heapstats;:
}
jlink コマンドで最低モジュール構成の実行可能 java イメージが作成できる
20Copyright©2017 NTT corp. All Rights Reserved.
Demonstration