javaone 2015 jdk update (jigsaw) #j1jp

82
JDK Update KUBOTA Yuji @sugarlife NTT OSSセンJavaOne 2015 報告会@東京 Copyright©2015 NTT corp. All Rights Reserved.

Upload: yuji-kubota

Post on 16-Apr-2017

11.278 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: JavaOne 2015 JDK Update (Jigsaw) #j1jp

JDK Update

KUBOTA Yuji @sugarlife

NTT OSSセン

JavaOne 2015 報告会@東京

Copyright©2015 NTT corp. All Rights Reserved.

Page 2: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Glossary • Java SE –Oracle 提供 い JRE, JDK • JDK –Java Developer Kit – Oracle 提供 い

限 い (例:OpenJDK) 本 JDK 表現

Copyright©2015 NTT corp. All Rights Reserved. 2

Page 3: JavaOne 2015 JDK Update (Jigsaw) #j1jp

KUBOTA Yuji @sugarlife • OpenJDK ー –コ 解析 GC ー ン , etc…

•解析支援 ー HeapStats 開 –多数 商用 元気 稼働中 :)

•難聴者 –資料的 多用

写真 人 セン 凄い 実感中 Copyright©2015 NTT corp. All Rights Reserved. 3

Page 4: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 5: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Why JavaOne ?

結婚式 ー 活躍 Copyright©2015 NTT corp. All Rights Reserved. 5

Page 6: JavaOne 2015 JDK Update (Jigsaw) #j1jp

•課題:Java 進化方向 •人物:誰 何 担当 •詳細:技術内容や事例

JavaOne 行 何 見聞

個人的 重要 ン

Copyright©2015 NTT corp. All Rights Reserved. 6

Page 7: JavaOne 2015 JDK Update (Jigsaw) #j1jp

現在 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

Page 8: JavaOne 2015 JDK Update (Jigsaw) #j1jp

何 大 く変わ ? • 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

Page 9: JavaOne 2015 JDK Update (Jigsaw) #j1jp

JDK 9 =

Project Jigsaw

Project Jigsaw JVM 変更(影響)範 多岐 渡 得 い面 あ

そ 以外 +

Copyright©2015 NTT corp. All Rights Reserved. 9

Page 10: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Project Jigsaw 以外 変更

Project Jigsaw 長い 後回 Copyright©2015 NTT corp. All Rights Reserved. 10

Page 11: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 12: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Read-Eval-Print-Loop Java 場 Good-bye {Sample,Example,Test}.java

Copyright©2015 NTT corp. All Rights Reserved. 12

Page 13: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 14: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 15: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 16: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 17: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 18: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 19: JavaOne 2015 JDK Update (Jigsaw) #j1jp

非互換 変更点 • 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

Page 20: JavaOne 2015 JDK Update (Jigsaw) #j1jp

非互換 変更点 • 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 変更

Page 21: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Project Jigsaw

長い Copyright©2015 NTT corp. All Rights Reserved. 21

Page 22: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Backgrounds • JAR Hell

Hadoop 様子

Copyright©2015 NTT corp. All Rights Reserved. 22

Page 23: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Backgrounds • JAR Hell

会場:(笑) 某Hadoopコ :(戦慄)

Copyright©2015 NTT corp. All Rights Reserved. 23

Page 24: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Backgrounds • JAR Hell 課題 –紛失 ? –コン 生? –内部 API 全 変更 ?

• JAR 抽象化機構 必要 –Module 導入

化 JDK 解決

Copyright©2015 NTT corp. All Rights Reserved. 24

Page 25: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Module

• Package コン –Module •Package(s) –Class(es) & Interface(s)

»Field(s) & Method(s) ー ー ン 作

Copyright©2015 NTT corp. All Rights Reserved. 25

Page 26: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Module

•新 コン 各コン ( ー ) •依 関係 明確化 •他コン 妨 い •特定 ー 公開

風 い い

Copyright©2015 NTT corp. All Rights Reserved. 26

Page 27: JavaOne 2015 JDK Update (Jigsaw) #j1jp

大雑把 ー • Before

依 関係 明確 Copyright©2015 NTT corp. All Rights Reserved. 27

a.jar

d.jar c.jar

b.jar

• After

mod a

mod d mod c

mod b

$ java –mp mod_dir \ mymod.Main

$ java –cp a.jar:\ b.jar:c.jar:d.jar \ myapp.Main

Page 28: JavaOne 2015 JDK Update (Jigsaw) #j1jp

実際 ー 作成方法 追 行 う Copyright©2015 NTT corp. All Rights Reserved. 28

ー 作成

Page 29: JavaOne 2015 JDK Update (Jigsaw) #j1jp

ー 作 Copyright©2015 NTT corp. All Rights Reserved. 29

com.foo.bar

Page 30: JavaOne 2015 JDK Update (Jigsaw) #j1jp

ー い い 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 :

Page 31: JavaOne 2015 JDK Update (Jigsaw) #j1jp

ー い い 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 :

Page 32: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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 :

Page 33: JavaOne 2015 JDK Update (Jigsaw) #j1jp

ー 情報 言 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 :

Page 34: JavaOne 2015 JDK Update (Jigsaw) #j1jp

ー 簡易 表現 Copyright©2015 NTT corp. All Rights Reserved. 34

module com.foo.bar { }

com.foo.bar

Page 35: JavaOne 2015 JDK Update (Jigsaw) #j1jp

実装 依 ー 2 追加 ※ java.* JDK ー 表

Copyright©2015 NTT corp. All Rights Reserved. 35

module com.foo.bar { }

java.sql

com.foo.bar

com.foo.baz

Page 36: JavaOne 2015 JDK Update (Jigsaw) #j1jp

依 ー う 定義 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

Page 37: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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; : }

Page 38: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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 通 定義さ

Page 39: JavaOne 2015 JDK Update (Jigsaw) #j1jp

依 ー 定義 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

Page 40: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 41: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 42: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 43: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 44: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 45: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Accessibility –public –protected –<package> –private

従来 セ 制限 考え方 う Copyright©2015 NTT corp. All Rights Reserved. 45

Page 46: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 47: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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; }

Page 48: JavaOne 2015 JDK Update (Jigsaw) #j1jp

JDK Module 化

JDK ー 化 脱 Copyright©2015 NTT corp. All Rights Reserved. 48

http://openjdk.java.net/jeps/200

Page 50: JavaOne 2015 JDK Update (Jigsaw) #j1jp

ー ン情報 • -listmods

全部 9.0

Copyright©2015 NTT corp. All Rights Reserved. 50

$ jdk1.9.0-ea/bin/java -listmods

[email protected] [email protected] [email protected] [email protected]

Page 51: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Java 界 的 Copyright©2015 NTT corp. All Rights Reserved. 51

ー 世代 実行方法

Page 52: JavaOne 2015 JDK Update (Jigsaw) #j1jp

コン • -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

Page 53: JavaOne 2015 JDK Update (Jigsaw) #j1jp

依 module 参照 • -modulepath mod1:mod2 …

classpath 使用感 -mp OK

Copyright©2015 NTT corp. All Rights Reserved. 53

$ java(c) –modulepath dir :dir :dir …

Page 54: JavaOne 2015 JDK Update (Jigsaw) #j1jp

依 付 コン • -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 :

Page 55: JavaOne 2015 JDK Update (Jigsaw) #j1jp

複数 ー 時コン • -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/… :

Page 56: JavaOne 2015 JDK Update (Jigsaw) #j1jp

実行 • -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

Page 57: JavaOne 2015 JDK Update (Jigsaw) #j1jp

依 ー 確認 • -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!

Page 58: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 59: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 60: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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 ン 不要

Page 61: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 62: JavaOne 2015 JDK Update (Jigsaw) #j1jp

別 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([email protected]/BuiltinClassLoader.java:368) at jdk.internal.misc.ClassLoaders$AppClassLoader.loadClass([email protected]/ClassLoaders.java:167) at java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:373) ... 1 more

$ java -cp mlib/app.jar com.foo.app.Main

Page 63: JavaOne 2015 JDK Update (Jigsaw) #j1jp

別 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 場合 方法 利用可能

Page 64: JavaOne 2015 JDK Update (Jigsaw) #j1jp

別 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 く 指定

Page 65: JavaOne 2015 JDK Update (Jigsaw) #j1jp

別 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!

個人的

Page 66: JavaOne 2015 JDK Update (Jigsaw) #j1jp

実行可能 ー 作成 • Linking

組 込 やセキ 活躍 ?

Copyright©2015 NTT corp. All Rights Reserved. 66

$ jlink --modulepath $JDKMODS \ --addmods java.base --output myimage

$ myimage/bin/java –listmods [email protected]

※:JDKMODS = $JAVA_HOME(jdk9)/jmods/

Page 67: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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 [email protected] [email protected] : com.foo.bar com.foo.app

Page 68: JavaOne 2015 JDK Update (Jigsaw) #j1jp

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

Page 69: JavaOne 2015 JDK Update (Jigsaw) #j1jp

一例 紹 Copyright©2015 NTT corp. All Rights Reserved. 69

自作 ー 対応

Page 70: JavaOne 2015 JDK Update (Jigsaw) #j1jp

ン ーン • ン

更 橙=普通 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

Page 71: JavaOne 2015 JDK Update (Jigsaw) #j1jp

依 確認 • 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

Page 72: JavaOne 2015 JDK Update (Jigsaw) #j1jp

自作 ー 化 • mylib

mylib myapp 限定 変更 容易

Copyright©2015 NTT corp. All Rights Reserved. 72

module mylib { requires java.base; exports com.myapp.lib to myapp; }

Page 73: JavaOne 2015 JDK Update (Jigsaw) #j1jp

自作 ー 化 • myapp

外部 ー 様 定義

Copyright©2015 NTT corp. All Rights Reserved. 73

module myapp { requires mylib; requires java.base; requires external.core; requires external.lib; }

Page 74: JavaOne 2015 JDK Update (Jigsaw) #j1jp

Automatic modules

–JAR 変更 必要 –JAR ー生成さ

–全 ー exports –他 全 ー requires

可能性 あ 全部舐 う Copyright©2015 NTT corp. All Rights Reserved. 74

requires external.core; requires external.lib;

Page 75: JavaOne 2015 JDK Update (Jigsaw) #j1jp

情報 自動生成 • 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

Page 76: JavaOne 2015 JDK Update (Jigsaw) #j1jp

終的 結果

作成 部分 Copyright©2015 NTT corp. All Rights Reserved. 76

external.core external.lib

java.base java.logging java.se

myapp mylib

Page 77: JavaOne 2015 JDK Update (Jigsaw) #j1jp

終的 結果

外部 依 関係 必要過多状態 Copyright©2015 NTT corp. All Rights Reserved. 77

external.core external.lib

java.base java.logging java.se

myapp mylib

Page 78: JavaOne 2015 JDK Update (Jigsaw) #j1jp

コン •配置

•コン

や 集大成 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

Page 79: JavaOne 2015 JDK Update (Jigsaw) #j1jp

実行 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

Page 81: JavaOne 2015 JDK Update (Jigsaw) #j1jp

End

Copyright©2015 NTT corp. All Rights Reserved. 81

Reference

openjdk.java.net/projects/jigsaw/

Page 82: JavaOne 2015 JDK Update (Jigsaw) #j1jp

End

い Copyright©2015 NTT corp. All Rights Reserved. 82