20
Copyright©2017 NTT corp. All Rights Reserved. Project Jigsaw 2017年10月28日 JavaOne 2017報告会 in 大阪 NTT OSSセンタ 久保田 祐史

Project Jigsaw #kanjava

Embed Size (px)

Citation preview

Page 1: Project Jigsaw #kanjava

Copyright©2017 NTT corp. All Rights Reserved.

Project Jigsaw

2017年10月28日JavaOne 2017報告会 in 大阪NTT OSSセンタ 久保田 祐史

Page 2: Project Jigsaw #kanjava

2Copyright©2017 NTT corp. All Rights Reserved.

•本セッション内容は公開されます

•資料はダウンロードできます。ざっくりですがノートに原稿も記載しています

• https://www.slideshare.net/YujiKubota/

•再アップロードできなくなったので一覧から…

•Twitterで #kanjava を付けて呟いて下さい

•難聴者の方などが理解する助けになります!

情報保障

Page 3: Project Jigsaw #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

Page 4: Project Jigsaw #kanjava

4Copyright©2017 NTT corp. All Rights Reserved.

HeapStats

Page 5: Project Jigsaw #kanjava

5Copyright©2017 NTT corp. All Rights Reserved.

Project Jigsaw

Page 6: Project Jigsaw #kanjava

6Copyright©2017 NTT corp. All Rights Reserved.

•JAR HELL

•依存性が複雑怪奇

•標準ライブラリ

•巨大かつ分割不可

Project Jigsaw

Page 7: Project Jigsaw #kanjava

7Copyright©2017 NTT corp. All Rights Reserved.

•紛失したライブラリはどれ?•コンフリクトはどこで発生?

•依存性を定義できないのが問題

•内部 API を安全に変更できる?•Public が Public 過ぎる

•公開範囲を設定できないのが問題

•解決策: Module の導入

依存性が複雑怪奇

Page 8: Project Jigsaw #kanjava

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

Page 9: Project Jigsaw #kanjava

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

Page 10: Project Jigsaw #kanjava

10Copyright©2017 NTT corp. All Rights Reserved.

Module

com.foo.bar.alpha.Alpha

com.foo.bar.beta.Beta

com.foo.internal.Internal

Module

Page 11: Project Jigsaw #kanjava

11Copyright©2017 NTT corp. All Rights Reserved.

Module

com.foo.bar.alpha.Alpha

com.foo.bar.beta.Beta

com.foo.internal.Internal

Module

Page 12: Project Jigsaw #kanjava

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

Page 13: Project Jigsaw #kanjava

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

Page 14: Project Jigsaw #kanjava

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

Page 15: Project Jigsaw #kanjava

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依存性

Page 16: Project Jigsaw #kanjava

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依存性可視性

Page 17: Project Jigsaw #kanjava

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

Page 18: Project Jigsaw #kanjava

18Copyright©2017 NTT corp. All Rights Reserved.

標準ライブラリもModule化

Page 19: Project Jigsaw #kanjava

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 イメージが作成できる

Page 20: Project Jigsaw #kanjava

20Copyright©2017 NTT corp. All Rights Reserved.

Demonstration