Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
JDK Update
KUBOTA Yuji
@sugarlife
NTT OSSセン
JavaOne 2015 報告会@東京
Copyright©2015 NTT corp. All Rights Reserved.
Glossary
• Java SE
–Oracle 提供 い JRE, JDK
• JDK
–Java Developer Kit
– Oracle 提供 い
限 い (例:OpenJDK)
本 JDK 表現
Copyright©2015 N...
KUBOTA Yuji @sugarlife
• OpenJDK ー
–コ 解析 GC ー ン , etc…
• 解析支援 ー HeapStats 開
–多数 商用 元気 稼働中 :)
• 難聴者
–資料的 多用
写真 人 セン 凄い 実感中
...
NTT OSSセン
• NTT ー OSS 活用 支え 部隊
*)OSSVERT®:OSs Suites VERified Technically 技術検証済 OSS組合せ
事業会社
SI会社
問合せ対応 導
入支援 保 等
技術検証
導入推進...
Why JavaOne ?
結婚式 ー 活躍
Copyright©2015 NTT corp. All Rights Reserved. 5
•課題:Java 進化方向
•人物:誰 何 担当
•詳細:技術内容や事例
JavaOne 行 何 見聞
個人的 重要 ン
Copyright©2015 NTT corp. All Rights Reserved. 6
現在 JDK 状況
• JDK 8 最新版
–Oracle JDK JDK 7 以前 公開
ー 停 (有償版 続い )
–OpenJDK RedHat ン ン
• JDK 9 来年 ー 予定
–2015/12/10: Feature Compl...
何 大 く変わ ?
• JDK 9
–Module 導入 (Project Jigsaw)
• Mark Reinhold
• JDK 10+
–HW, OS へ 最適化 (Project Valhalla,
Project Panama)
•...
JDK 9 =
Project
Jigsaw
Project Jigsaw JVM 変更(影響)範
多岐 渡 得 い面 あ
そ 以外
+
Copyright©2015 NTT corp. All Rights Reserved. 9
Project Jigsaw
以外 変更
Project Jigsaw 長い 後回
Copyright©2015 NTT corp. All Rights Reserved. 10
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
Language and Tooling
• User-facing features
–jshell
–Java.Doc.Next
–Cross compiling and the javac –release
–Milling Projec...
非互換 変更点
• New version-string format, “_” 1文 命 禁
• 6 非推奨 ソ 削除 (JEP 162)
• JDK 内部 API セ 化 (削除 い)
• JDK / JRE ン ー 変更 (JEP 220...
非互換 変更点
• New version-string format, “_” 1文 命 禁
• 6 非推奨 ソ 削除 (JEP 162)
• JDK 内部 API セ 化 (削除 い)
• JDK / JRE ン ー 変更 (JEP 220...
Project Jigsaw
長い
Copyright©2015 NTT corp. All Rights Reserved. 21
Backgrounds
• JAR Hell
Hadoop 様子
Copyright©2015 NTT corp. All Rights Reserved. 22
Backgrounds
• JAR Hell
会場:(笑) 某Hadoopコ :(戦慄)
Copyright©2015 NTT corp. All Rights Reserved. 23
Backgrounds
• JAR Hell 課題
–紛失 ?
–コン 生?
–内部 API 全 変更 ?
• JAR 抽象化機構 必要
–Module 導入
化 JDK 解決
Copyright©2015 NTT corp. All Righ...
Module
• Package コン
–Module
•Package(s)
–Class(es) & Interface(s)
»Field(s) & Method(s)
ー ー ン 作
Copyright©2015 NTT corp. A...
Module
• 新 コン
各コン ( ー )
•依 関係 明確化
•他コン 妨 い
•特定 ー 公開
風 い い
Copyright©2015 NTT corp. All Rights Reserved. 26
大雑把 ー
• Before
依 関係 明確
Copyright©2015 NTT corp. All Rights Reserved. 27
a.jar
d.jarc.jar
b.jar
?
• After
mod a
mod dmod c
...
実際 ー 作成方法 追 行 う
Copyright©2015 NTT corp. All Rights Reserved. 28
ー 作成
ー 作
Copyright©2015 NTT corp. All Rights Reserved. 29
com.foo.bar
ー い い
Copyright©2015 NTT corp. All Rights Reserved. 30
com.foo.bar
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.i...
ー い い
Copyright©2015 NTT corp. All Rights Reserved. 31
com.foo.bar
com.foo.bar.alpha.Alpha
com.foo.bar.beta.Beta
com.foo.i...
module-info.java src ベ
Copyright©2015 NTT corp. All Rights Reserved. 32
com.foo.bar
com.foo.bar.alpha.Alpha
com.foo.bar.be...
ー 情報 言
Copyright©2015 NTT corp. All Rights Reserved. 33
com.foo.bar
module com.foo.bar {
}
com.foo.bar.alpha.Alpha
com.foo...
ー 簡易 表現
Copyright©2015 NTT corp. All Rights Reserved. 34
module com.foo.bar {
}
com.foo.bar
実装 依 ー 2 追加
※ java.* JDK ー 表
Copyright©2015 NTT corp. All Rights Reserved. 35
module com.foo.bar {
}
java.sql
com.foo.bar
...
依 ー う 定義
Copyright©2015 NTT corp. All Rights Reserved. 36
module com.foo.bar {
requires com.foo.baz;
requires java.sql;
}
...
Copyright©2015 NTT corp. All Rights Reserved. 37
うい 依 関係 場合
module com.foo.bar {
requires java.sql;
requires java.logging;...
Copyright©2015 NTT corp. All Rights Reserved. 38
module java.sql {
:
requires public java.logging;
:
}
う 定義 requires
依 可能 ...
依 ー 定義
Copyright©2015 NTT corp. All Rights Reserved. 39
module com.foo.bar {
requires com.foo.baz;
requires java.sql;
}
co...
Copyright©2015 NTT corp. All Rights Reserved. 40
com.foo.bar
次 ー 内 あ ー 注目
com.foo.internal
com.foo.bar.alpha
com.foo.bar.b...
Copyright©2015 NTT corp. All Rights Reserved. 41
com.foo.bar
com.foo.internal
com.foo.bar.alpha
com.foo.bar.beta
内部 API 変更...
Copyright©2015 NTT corp. All Rights Reserved. 42
com.foo.bar
java.sql
com.foo.internal
com.foo.bar.alpha
com.foo.bar.beta
...
Copyright©2015 NTT corp. All Rights Reserved. 43
module com.foo.bar {
requires com.foo.baz;
requires java.sql;
exports com...
Copyright©2015 NTT corp. All Rights Reserved. 44
module com.foo.bar {
requires com.foo.baz;
requires java.sql;
exports com...
Accessibility
–public
–protected
–<package>
–private
従来 セ 制限 考え方 う
Copyright©2015 NTT corp. All Rights Reserved. 45
Accessibility
–public to everyone
–public but only to specific modules
–public only within a module
–protected
–<package>
...
Services
• java.util.ServiceLoader
META-INF/services/* 変更 形
Copyright©2015 NTT corp. All Rights Reserved. 47
module com.my...
JDK Module 化
JDK ー 化 脱
Copyright©2015 NTT corp. All Rights Reserved. 48
http://openjdk.java.net/jeps/200
JDK (API) Module 化
ー ー 化 完了
Copyright©2015 NTT corp. All Rights Reserved. 49
http://openjdk.java.net/projects/jigsaw/j1/in...
ー ン情報
• -listmods
全部 9.0
Copyright©2015 NTT corp. All Rights Reserved. 50
$ jdk1.9.0-ea/bin/java -listmods
java.activation...
Java 界 的
Copyright©2015 NTT corp. All Rights Reserved. 51
ー 世代
実行方法
コン
• -d <Directory>
com.foo.app ー さえ
Copyright©2015 NTT corp. All Rights Reserved. 52
$ javac –d mods/com.foo.app 
src/com...
依 module 参照
• -modulepath mod1:mod2 …
classpath 使用感 -mp OK
Copyright©2015 NTT corp. All Rights Reserved. 53
$ java(c) –mod...
依 付 コン
• -mp <mods> -d <Directory>
-d 依 有無関係 く必要
Copyright©2015 NTT corp. All Rights Reserved. 54
$ javac –mp mods –d mods...
複数 ー 時コン
• -modulesourcepath <src>
-d 指定先 自動生成
Copyright©2015 NTT corp. All Rights Reserved. 55
$ javac -modulesourcepath ...
実行
• -m <module>/<main-class>
そ 実行 -m 新 く必要
Copyright©2015 NTT corp. All Rights Reserved. 56
$ java –mp mods 
–m com.foo.a...
依 ー 確認
• -Xdiag:resolver
各 ー 間 依 関係 解
Copyright©2015 NTT corp. All Rights Reserved. 57
$ java –Xdiag:resolver –mp mods 
–m...
modular JAR 作 方
• -C <path/to/module>
--module-version ー ン 入力可能
Copyright©2015 NTT corp. All Rights Reserved. 58
$ jar –-c...
modular JAR 確認
• --print-module-descriptor (-p)
java.base 基底 ー = MANDATED
Copyright©2015 NTT corp. All Rights Reserved. 59...
modular JAR 実行
• -mp <path/to/jar>
Copyright©2015 NTT corp. All Rights Reserved. 60
$ java –mp mlib –m com.foo.app
Hello w...
classpath modular jar
• -cp <path/to/jar>
Copyright©2015 NTT corp. All Rights Reserved. 61
$ java -cp mlib/app.jar com.foo...
別 jar 依 あ 場合
• bar.jar 必要 ー 想定
bar.jar 含 必要 ー
Copyright©2015 NTT corp. All Rights Reserved. 62
Exception in thread "main" ...
別 jar 依 あ 場合
• ー 非対応 JAR 場合
Copyright©2015 NTT corp. All Rights Reserved. 63
$ java -cp /path/to/bar.jar:mlib/app.jar 
com...
別 jar 依 あ 場合
• ー 対応 JAR 場合
Copyright©2015 NTT corp. All Rights Reserved. 64
$ java -mp /directory/of/bar.jar/ 
–addmods co...
別 jar 依 あ 場合
•
Copyright©2015 NTT corp. All Rights Reserved. 65
$ java -mp <Modular JAR > 
-cp <Modular 非対応 JAR 列挙> 
-m co...
実行可能 ー 作成
• Linking
組 込 やセキ 活躍 ?
Copyright©2015 NTT corp. All Rights Reserved. 66
$ jlink --modulepath $JDKMODS 
--addmods...
Linking
• jlink
時代 java ー 乱立 恐怖
Copyright©2015 NTT corp. All Rights Reserved. 67
$ jlink --modulepath $JDKMODS:mlib 
--add...
Linking (実行)
• jlink
組 込 -mp 不要
Copyright©2015 NTT corp. All Rights Reserved. 68
$ myimage/bin/java -m com.foo.app
$ myima...
一例 紹
Copyright©2015 NTT corp. All Rights Reserved. 69
自作
ー 対応
ン ーン
• ン
更 橙=普通 jar, 青=module
Copyright©2015 NTT corp. All Rights Reserved. 70
myapp.jar mylib.jar
external-core-1.2.3.jar...
依 確認
• jdeps
依 置い 実行
Copyright©2015 NTT corp. All Rights Reserved. 71
$ jdeps –s lib/myapp.jar lib/mylib.jar
myapp.jar -> ...
自作 ー 化
• mylib
mylib myapp 限定 変更 容易
Copyright©2015 NTT corp. All Rights Reserved. 72
module mylib {
requires java.base;
ex...
自作 ー 化
• myapp
外部 ー 様 定義
Copyright©2015 NTT corp. All Rights Reserved. 73
module myapp {
requires mylib;
requires java.bas...
Automatic modules
–JAR 変更 必要
–JAR ー
生成さ
–全 ー exports
–他 全 ー requires
可能性 あ 全部舐 う
Copyright©2015 NTT corp. All Rights Reser...
情報 自動生成
• jdeps -genmoduleinfo
全 ー exports 要修
Copyright©2015 NTT corp. All Rights Reserved. 75
Writing to src/mylib/module...
最終的 結果
作成 部分
Copyright©2015 NTT corp. All Rights Reserved. 76
external.core external.lib
java.base java.logging java.se
my...
最終的 結果
外部 依 関係 必要過多状態
Copyright©2015 NTT corp. All Rights Reserved. 77
external.core external.lib
java.base java.logging j...
コン
• 配置
• コン
や 集大成
Copyright©2015 NTT corp. All Rights Reserved. 78
./lib/external*.jar
./src/myapp/module-info.java
./src...
実行 before/after
• Before
• After
Copyright©2015 NTT corp. All Rights Reserved. 79
$ java –cp lib/myapp.jar:lib/mylib.jar:
...
End
Copyright©2015 NTT corp. All Rights Reserved. 80
Jigsaw 考え方
出展: http://openjdk.java.net/projects/jigsaw/j1/jigsaw-unde...
End
Copyright©2015 NTT corp. All Rights Reserved. 81
Reference
openjdk.java.net/
projects/jigsaw/
End
い
Copyright©2015 NTT corp. All Rights Reserved. 82
Upcoming SlideShare
Loading in …5
×

JavaOne 2015 JDK Update (Jigsaw) #j1jp

14,140 views

Published on

Slides of JDK Update (Especially Project Jigsaw) .
https://jjug.doorkeeper.jp/events/33374

Published in: Technology
  • Be the first to comment

JavaOne 2015 JDK Update (Jigsaw) #j1jp

  1. 1. JDK Update KUBOTA Yuji @sugarlife NTT OSSセン JavaOne 2015 報告会@東京 Copyright©2015 NTT corp. All Rights Reserved.
  2. 2. Glossary • Java SE –Oracle 提供 い JRE, JDK • JDK –Java Developer Kit – Oracle 提供 い 限 い (例:OpenJDK) 本 JDK 表現 Copyright©2015 NTT corp. All Rights Reserved. 2
  3. 3. KUBOTA Yuji @sugarlife • OpenJDK ー –コ 解析 GC ー ン , etc… • 解析支援 ー HeapStats 開 –多数 商用 元気 稼働中 :) • 難聴者 –資料的 多用 写真 人 セン 凄い 実感中 Copyright©2015 NTT corp. All Rights Reserved. 3
  4. 4. NTT OSSセン • NTT ー OSS 活用 支え 部隊 *)OSSVERT®:OSs Suites VERified Technically 技術検証済 OSS組合せ 事業会社 SI会社 問合せ対応 導 入支援 保 等 技術検証 導入推進 / ー 類開 技術者育成 人材交流 各種 OSS コ 設計, 開 , 運用 ー 各社 ー ベン NTT 研究所 等 様 ー 連携 開 連携 OSS ー ー NTT OSSセン OSS適用推進 (OSSVERT®*検証) 技術開 (DBMS,高可用 等) ソ 基盤技術力向 Kernel, PostgreSQL, Pacemaker, Tomcat, etc Copyright©2015 NTT corp. All Rights Reserved. 4
  5. 5. Why JavaOne ? 結婚式 ー 活躍 Copyright©2015 NTT corp. All Rights Reserved. 5
  6. 6. •課題:Java 進化方向 •人物:誰 何 担当 •詳細:技術内容や事例 JavaOne 行 何 見聞 個人的 重要 ン Copyright©2015 NTT corp. All Rights Reserved. 6
  7. 7. 現在 JDK 状況 • JDK 8 最新版 –Oracle JDK JDK 7 以前 公開 ー 停 (有償版 続い ) –OpenJDK RedHat ン ン • JDK 9 来年 ー 予定 –2015/12/10: Feature Complete –2016/09/22: General Availability 次 JavaOne 最終日 合わせ Copyright©2015 NTT corp. All Rights Reserved. 7
  8. 8. 何 大 く変わ ? • JDK 9 –Module 導入 (Project Jigsaw) • Mark Reinhold • JDK 10+ –HW, OS へ 最適化 (Project Valhalla, Project Panama) • Brian Goetz, John Rose, Charles Nutter 10+ 殆 Update (去年 報告会) Copyright©2015 NTT corp. All Rights Reserved. 8
  9. 9. JDK 9 = Project Jigsaw Project Jigsaw JVM 変更(影響)範 多岐 渡 得 い面 あ そ 以外 + Copyright©2015 NTT corp. All Rights Reserved. 9
  10. 10. Project Jigsaw 以外 変更 Project Jigsaw 長い 後回 Copyright©2015 NTT corp. All Rights Reserved. 10
  11. 11. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javac ー 関わ 言語や ー 変更点 Copyright©2015 NTT corp. All Rights Reserved. 11
  12. 12. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javacRead-Eval-Print-Loop Java 場 Good-bye {Sample,Example,Test}.java Copyright©2015 NTT corp. All Rights Reserved. 12
  13. 13. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javac 検索機能追加, HTML5対応, Doclet 改善, 等 Copyright©2015 NTT corp. All Rights Reserved. 13
  14. 14. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javac javac 古い ー ン N 合わせ 場合 -source N -target N 他 -bootclasspath jdkN/lib/rt.jar 必要 -release N 後 過去 3 ー ン 対応(9 6) Copyright©2015 NTT corp. All Rights Reserved. 14
  15. 15. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javac“_” 命 禁 , private interface methods, 匿 ン 対応, 等 Copyright©2015 NTT corp. All Rights Reserved. 15
  16. 16. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javac jdk javac lint warnings 0 Copyright©2015 NTT corp. All Rights Reserved. 16
  17. 17. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javac 超要約 Diamond Nest祭 く Copyright©2015 NTT corp. All Rights Reserved. 17
  18. 18. Language and Tooling • User-facing features –jshell –Java.Doc.Next –Cross compiling and the javac –release –Milling Project Coin –Deprecation and imports • Re-engineering javac 出展:https://blogs.oracle.com/darcy/resource/JavaOne/J1_2015-jdk9- langtools.pdf P.99 Copyright©2015 NTT corp. All Rights Reserved. 18
  19. 19. 非互換 変更点 • New version-string format, “_” 1文 命 禁 • 6 非推奨 ソ 削除 (JEP 162) • JDK 内部 API セ 化 (削除 い) • JDK / JRE ン ー 変更 (JEP 220) – JDK jre 削除 – ー 編集可能 構成 lib conf へ, 等 – rt.jar, tools.jar 等 内部 削除 (再構築) • ー 変え 以 削除 (JEP 261) – Endorsed-standards override and extension mechanisms – -Xbootclasspath, -Xbootclasspath/p, sun.boot.class.path 詳細や代替方法 各 JEP 確認 う Copyright©2015 NTT corp. All Rights Reserved. 19
  20. 20. 非互換 変更点 • New version-string format, “_” 1文 命 禁 • 6 非推奨 ソ 削除 (JEP 162) • JDK 内部 API セ 化 (削除 い) • JDK / JRE ン ー 変更 (JEP 220) – JDK jre 削除 – ー 編集可能 構成 lib conf へ, 等 – rt.jar, tools.jar 等 内部 削除 (再構築) • ー 変え 以 削除 (JEP 261) – Endorsed-standards override and extension mechanisms – -Xbootclasspath, -Xbootclasspath/p, sun.boot.class.path Jigsaw 影響 大 さ 窺え Copyright©2015 NTT corp. All Rights Reserved. 20 Project Jigsaw 変更
  21. 21. Project Jigsaw 長い Copyright©2015 NTT corp. All Rights Reserved. 21
  22. 22. Backgrounds • JAR Hell Hadoop 様子 Copyright©2015 NTT corp. All Rights Reserved. 22
  23. 23. Backgrounds • JAR Hell 会場:(笑) 某Hadoopコ :(戦慄) Copyright©2015 NTT corp. All Rights Reserved. 23
  24. 24. Backgrounds • JAR Hell 課題 –紛失 ? –コン 生? –内部 API 全 変更 ? • JAR 抽象化機構 必要 –Module 導入 化 JDK 解決 Copyright©2015 NTT corp. All Rights Reserved. 24
  25. 25. Module • Package コン –Module •Package(s) –Class(es) & Interface(s) »Field(s) & Method(s) ー ー ン 作 Copyright©2015 NTT corp. All Rights Reserved. 25
  26. 26. Module • 新 コン 各コン ( ー ) •依 関係 明確化 •他コン 妨 い •特定 ー 公開 風 い い Copyright©2015 NTT corp. All Rights Reserved. 26
  27. 27. 大雑把 ー • Before 依 関係 明確 Copyright©2015 NTT corp. All Rights Reserved. 27 a.jar d.jarc.jar b.jar ? • After mod a mod dmod c mod b $ java –mp mod_dir mymod.Main $ java –cp a.jar: b.jar:c.jar:d.jar myapp.Main
  28. 28. 実際 ー 作成方法 追 行 う Copyright©2015 NTT corp. All Rights Reserved. 28 ー 作成
  29. 29. ー 作 Copyright©2015 NTT corp. All Rights Reserved. 29 com.foo.bar
  30. 30. ー い い Copyright©2015 NTT corp. All Rights Reserved. 30 com.foo.bar com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal :
  31. 31. ー い い Copyright©2015 NTT corp. All Rights Reserved. 31 com.foo.bar com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal :
  32. 32. module-info.java src ベ Copyright©2015 NTT corp. All Rights Reserved. 32 com.foo.bar com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal :
  33. 33. ー 情報 言 Copyright©2015 NTT corp. All Rights Reserved. 33 com.foo.bar module com.foo.bar { } com.foo.bar.alpha.Alpha com.foo.bar.beta.Beta com.foo.internal.Internal :
  34. 34. ー 簡易 表現 Copyright©2015 NTT corp. All Rights Reserved. 34 module com.foo.bar { } com.foo.bar
  35. 35. 実装 依 ー 2 追加 ※ java.* JDK ー 表 Copyright©2015 NTT corp. All Rights Reserved. 35 module com.foo.bar { } java.sql com.foo.bar com.foo.baz
  36. 36. 依 ー う 定義 Copyright©2015 NTT corp. All Rights Reserved. 36 module com.foo.bar { requires com.foo.baz; requires java.sql; } java.sql com.foo.bar com.foo.baz
  37. 37. Copyright©2015 NTT corp. All Rights Reserved. 37 うい 依 関係 場合 module com.foo.bar { requires java.sql; requires java.logging; : } com.foo.bar java.sql java.logging module java.sql { : requires java.logging; : }
  38. 38. Copyright©2015 NTT corp. All Rights Reserved. 38 module java.sql { : requires public java.logging; : } う 定義 requires 依 可能 (暗黙 可読性) module com.foo.bar { requires java.sql; : } reads com.foo.bar java.sql java.logging ※: java.sql 通 定義さ
  39. 39. 依 ー 定義 Copyright©2015 NTT corp. All Rights Reserved. 39 module com.foo.bar { requires com.foo.baz; requires java.sql; } com.foo.baz java.sql java.logging com.foo.bar
  40. 40. Copyright©2015 NTT corp. All Rights Reserved. 40 com.foo.bar 次 ー 内 あ ー 注目 com.foo.internal com.foo.bar.alpha com.foo.bar.beta module com.foo.bar { requires com.foo.baz; requires java.sql; } java.logging com.foo.baz java.sql
  41. 41. Copyright©2015 NTT corp. All Rights Reserved. 41 com.foo.bar com.foo.internal com.foo.bar.alpha com.foo.bar.beta 内部 API 変更時 影響 抑え 他 ー 公開 くあ せ module com.foo.bar { requires com.foo.baz; requires java.sql; } java.logging com.foo.baz java.sql
  42. 42. Copyright©2015 NTT corp. All Rights Reserved. 42 com.foo.bar java.sql com.foo.internal com.foo.bar.alpha com.foo.bar.beta module com.foo.bar { requires com.foo.baz; requires java.sql; exports com.foo.bar.alpha; exports com.foo.bar.beta; } 他 ー 公開 ー (exports) そ 情報 定義 java.logging com.foo.baz
  43. 43. Copyright©2015 NTT corp. All Rights Reserved. 43 module com.foo.bar { requires com.foo.baz; requires java.sql; exports com.foo.bar.alpha; exports com.foo.bar.beta; } exports 含 い い場合 public あ 他 ー 参照 せ com.foo.internal com.foo.bar.alpha com.foo.bar.beta reads reads com.foo.bar com.foo.app
  44. 44. Copyright©2015 NTT corp. All Rights Reserved. 44 module com.foo.bar { requires com.foo.baz; requires java.sql; exports com.foo.bar.alpha to com.foo.app, com.foo.xxx; exports com.foo.bar.beta to com.foo.app, com.foo.xxx; } com.foo.internal com.foo.bar.alpha com.foo.bar.beta reads com.foo.zzz reads com.foo.bar exports 先 ー 限定 com.foo.app
  45. 45. Accessibility –public –protected –<package> –private 従来 セ 制限 考え方 う Copyright©2015 NTT corp. All Rights Reserved. 45
  46. 46. Accessibility –public to everyone –public but only to specific modules –public only within a module –protected –<package> –private JDK9 public 範 指定可能 ! Copyright©2015 NTT corp. All Rights Reserved. 46 exports p; exports p to m; exports
  47. 47. Services • java.util.ServiceLoader META-INF/services/* 変更 形 Copyright©2015 NTT corp. All Rights Reserved. 47 module com.mysql.jdbc { requires java.sql; exports com.mysql.jdbc; provides java.sql.Driver with com.mysql.jdbc.Driver; } module java.sql { : exports javax.transaction.xa; uses java.sql.Driver; }
  48. 48. JDK Module 化 JDK ー 化 脱 Copyright©2015 NTT corp. All Rights Reserved. 48 http://openjdk.java.net/jeps/200
  49. 49. JDK (API) Module 化 ー ー 化 完了 Copyright©2015 NTT corp. All Rights Reserved. 49 http://openjdk.java.net/projects/jigsaw/j1/intro- modular-dev-j1-2015.pdf P.19
  50. 50. ー ン情報 • -listmods 全部 9.0 Copyright©2015 NTT corp. All Rights Reserved. 50 $ jdk1.9.0-ea/bin/java -listmods java.activation@9.0 java.annotations.common@9.0 java.base@9.0 java.compact1@9.0 :
  51. 51. Java 界 的 Copyright©2015 NTT corp. All Rights Reserved. 51 ー 世代 実行方法
  52. 52. コン • -d <Directory> com.foo.app ー さえ Copyright©2015 NTT corp. All Rights Reserved. 52 $ javac –d mods/com.foo.app src/com.foo.app/module-info.java src/com.foo.app/com/foo/app/Main.java : src `-- com.foo.app |-- com | `-- foo | `-- app | `-- Main.java `-- module-info.java mods `-- com.foo.app |-- com | `-- foo | `-- app | `-- Main.class `-- module-info.class
  53. 53. 依 module 参照 • -modulepath mod1:mod2 … classpath 使用感 -mp OK Copyright©2015 NTT corp. All Rights Reserved. 53 $ java(c) –modulepath dir :dir :dir …
  54. 54. 依 付 コン • -mp <mods> -d <Directory> -d 依 有無関係 く必要 Copyright©2015 NTT corp. All Rights Reserved. 54 $ javac –mp mods –d mods/com.foo.bar src/com.foo.bar/module-info.java src/com.foo.bar/com/foo/bar/alpha/… : src/com.foo.bar/module-info.java src/com.foo.bar/com/foo/bar/alpha/Alpha.java : mods/com.foo.bar/module-info.class mods/com.foo.bar/com/foo/bar/alpha/Alpha.class :
  55. 55. 複数 ー 時コン • -modulesourcepath <src> -d 指定先 自動生成 Copyright©2015 NTT corp. All Rights Reserved. 55 $ javac -modulesourcepath src -d mods src/com.foo.bar/module-info.java src/com.foo.bar/com/foo/bar/alpha/… : mods/com.foo.bar/module-info.class mods/com.foo.bar/com/foo/bar/alpha/Alpha.class : mods/com.foo.othermodule/module-info.class mods/com.foo.othermodule/com/foo/othermodule/… :
  56. 56. 実行 • -m <module>/<main-class> そ 実行 -m 新 く必要 Copyright©2015 NTT corp. All Rights Reserved. 56 $ java –mp mods –m com.foo.app/com.foo.app.Main Hello world from module com.foo.app! module name main class
  57. 57. 依 ー 確認 • -Xdiag:resolver 各 ー 間 依 関係 解 Copyright©2015 NTT corp. All Rights Reserved. 57 $ java –Xdiag:resolver –mp mods –m com.foo.app/com.foo.app.Main [Resolve] Root module com.foo.app located [Resolve] (file:///ykubota/mods/com.foo.app/) [Resolve] Module java.base located, required by com.foo.app [Resolve] (jrt:/java.base) : (依 ー 全部読込 要求 ー 共 出力) [Resolve] Resolve completed [Resolve] com.foo.app [Resolve] java.base : (読込 ー ) Hello world from module com.foo.app!
  58. 58. modular JAR 作 方 • -C <path/to/module> --module-version ー ン 入力可能 Copyright©2015 NTT corp. All Rights Reserved. 58 $ jar –-create –-file mlib/app.jar --main-class com.foo.app.Main -C mods/com.foo.app . module-info.class com/foo/app/Main.class : app.jar
  59. 59. modular JAR 確認 • --print-module-descriptor (-p) java.base 基底 ー = MANDATED Copyright©2015 NTT corp. All Rights Reserved. 59 $ jar -p –-file mlib/app.jar Name: com.foo.app Requires: java.base [ MANDATED ] : Main class: com.foo.app.Main
  60. 60. modular JAR 実行 • -mp <path/to/jar> Copyright©2015 NTT corp. All Rights Reserved. 60 $ java –mp mlib –m com.foo.app Hello world from module com.foo.app! jar 生成時 ン 指定 -m ン 不要
  61. 61. classpath modular jar • -cp <path/to/jar> Copyright©2015 NTT corp. All Rights Reserved. 61 $ java -cp mlib/app.jar com.foo.app.Main Hello world from module com.foo.app! 後方互換性 あ java -jar app.jar OK
  62. 62. 別 jar 依 あ 場合 • bar.jar 必要 ー 想定 bar.jar 含 必要 ー Copyright©2015 NTT corp. All Rights Reserved. 62 Exception in thread "main" java.lang.NoClassDefFoundError: com/foo/bar/Something at com.foo.app.Main.main(Main.java:8) Caused by: java.lang.ClassNotFoundException: com.foo.bar.Something at jdk.internal.misc.BuiltinClassLoader.loadClass(java.base@9.0/BuiltinClassLoader.java:368) at jdk.internal.misc.ClassLoaders$AppClassLoader.loadClass(java.base@9.0/ClassLoaders.java:167) at java.lang.ClassLoader.loadClass(java.base@9.0/ClassLoader.java:373) ... 1 more $ java -cp mlib/app.jar com.foo.app.Main
  63. 63. 別 jar 依 あ 場合 • ー 非対応 JAR 場合 Copyright©2015 NTT corp. All Rights Reserved. 63 $ java -cp /path/to/bar.jar:mlib/app.jar com.foo.app.Main Hello world from module com.foo.app! 後方互換性 あ ー 対応 JAR 場合 方法 利用可能
  64. 64. 別 jar 依 あ 場合 • ー 対応 JAR 場合 Copyright©2015 NTT corp. All Rights Reserved. 64 $ java -mp /directory/of/bar.jar/ –addmods com.foo.bar -cp mlib/app.jar com.foo.app.Main Hello world from module com.foo.app! -mp 指定 場合 addmods 必要 -mp く 指定
  65. 65. 別 jar 依 あ 場合 • Copyright©2015 NTT corp. All Rights Reserved. 65 $ java -mp <Modular JAR > -cp <Modular 非対応 JAR 列挙> -m com.foo.app Hello world from module com.foo.app! 個人的
  66. 66. 実行可能 ー 作成 • Linking 組 込 やセキ 活躍 ? Copyright©2015 NTT corp. All Rights Reserved. 66 $ jlink --modulepath $JDKMODS --addmods java.base --output myimage $ myimage/bin/java –listmods java.base@9.0 ※:JDKMODS = $JAVA_HOME(jdk9)/jmods/
  67. 67. Linking • jlink 時代 java ー 乱立 恐怖 Copyright©2015 NTT corp. All Rights Reserved. 67 $ jlink --modulepath $JDKMODS:mlib --addmods com.foo.app --output myimage $ myimage/bin/java –listmods java.base@9.0 java.logging@9.0 : com.foo.bar com.foo.app
  68. 68. Linking (実行) • jlink 組 込 -mp 不要 Copyright©2015 NTT corp. All Rights Reserved. 68 $ myimage/bin/java -m com.foo.app $ myimage/bin/com.foo.app Hello world from module com.foo.app! myimage/ |-- bin | |-- com.foo.app | |-- java : `-- keytool
  69. 69. 一例 紹 Copyright©2015 NTT corp. All Rights Reserved. 69 自作 ー 対応
  70. 70. ン ーン • ン 更 橙=普通 jar, 青=module Copyright©2015 NTT corp. All Rights Reserved. 70 myapp.jar mylib.jar external-core-1.2.3.jar external-lib-1.2.3.jar java.base java.logging java.sql
  71. 71. 依 確認 • jdeps 依 置い 実行 Copyright©2015 NTT corp. All Rights Reserved. 71 $ jdeps –s lib/myapp.jar lib/mylib.jar myapp.jar -> lib/external-core-1.2.3.jar myapp.jar -> lib/external-lib-1.2.3.jar myapp.jar -> mylib.jar myapp.jar -> java.base mylib.jar -> java.base
  72. 72. 自作 ー 化 • mylib mylib myapp 限定 変更 容易 Copyright©2015 NTT corp. All Rights Reserved. 72 module mylib { requires java.base; exports com.myapp.lib to myapp; }
  73. 73. 自作 ー 化 • myapp 外部 ー 様 定義 Copyright©2015 NTT corp. All Rights Reserved. 73 module myapp { requires mylib; requires java.base; requires external.core; requires external.lib; }
  74. 74. Automatic modules –JAR 変更 必要 –JAR ー 生成さ –全 ー exports –他 全 ー requires 可能性 あ 全部舐 う Copyright©2015 NTT corp. All Rights Reserved. 74 requires external.core; requires external.lib;
  75. 75. 情報 自動生成 • jdeps -genmoduleinfo 全 ー exports 要修 Copyright©2015 NTT corp. All Rights Reserved. 75 Writing to src/mylib/module-info.java Writing to src/myapp/module-info.java Writing to src/external-core/module-… Writing to src/external-lib/module-… $ jdeps –genmoduleinfo src libs/*.jar
  76. 76. 最終的 結果 作成 部分 Copyright©2015 NTT corp. All Rights Reserved. 76 external.core external.lib java.base java.logging java.se myapp mylib
  77. 77. 最終的 結果 外部 依 関係 必要過多状態 Copyright©2015 NTT corp. All Rights Reserved. 77 external.core external.lib java.base java.logging java.se myapp mylib
  78. 78. コン • 配置 • コン や 集大成 Copyright©2015 NTT corp. All Rights Reserved. 78 ./lib/external*.jar ./src/myapp/module-info.java ./src/myapp/… <Java files> ./src/mylib/… <Java files> $ javac -modulesourcepath src –mp lib –d mods ./src/… $ jar --create --file mlib/mylib.jar –C mods/mylib . $ jar --create --file mlib/myapp.jar –C mods/myapp . --main-class myapp.Main
  79. 79. 実行 before/after • Before • After Copyright©2015 NTT corp. All Rights Reserved. 79 $ java –cp lib/myapp.jar:lib/mylib.jar: lib/external-core-1.2.3.jar: lib/external-lib-1.2.3.jar myapp.Main $ java –mp mlib:lib –m myapp
  80. 80. End Copyright©2015 NTT corp. All Rights Reserved. 80 Jigsaw 考え方 出展: http://openjdk.java.net/projects/jigsaw/j1/jigsaw-under- the-hood-j1-2015.pdf P.58
  81. 81. End Copyright©2015 NTT corp. All Rights Reserved. 81 Reference openjdk.java.net/ projects/jigsaw/
  82. 82. End い Copyright©2015 NTT corp. All Rights Reserved. 82

×