advanced modular development...#javaone #jigsaw copyright © 2016, oracle and/or its affiliates. all...

Post on 20-May-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Advanced Modular Development

Alan Bateman Alex Buckley JavaPlatformGroup,OracleSeptember2016

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |#JavaOne#Jigsaw

Sessions

Prepare for JDK 9

Introduction to Modular Development

Advanced Modular Development

Modules and Services

Project Jigsaw: Under The Hood

1

3

2

1

2

4

5

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

ApplicationMigration

3

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Typicalapplication

4

JAR JAR

JAR

JAR JAR

JARJAR

JAR

JARJAR JAR

JAR

JDK

JARJAR

JAR

JAR

JAR

JAR

JAR

JARJAR

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Typicalapplication

5

JAR JAR

JAR

JAR

JAR

JARJAR JAR

JARJAR

JAR

JAR

JAR

JAR

JAR

JARJAR

modulejava.base

modulejava.logging

modulejava.sql

modulejava.xml

JAR

JAR

JAR

JAR

JAR

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 6

jackson-databind-2.6.2.jar

myapp.jar

modulejava.base

modulejava.logging

mylib.jar

modulejava.xml

modulejava.sql

jackson-annotations-2.6.2.jar

jackson-core-2.6.2.jar

SampleScenario

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 7

$ java -cp \ lib/myapp.jar:\ lib/mylib.jar:\ lib/jackson-core-2.6.2.jar:\ lib/jackson-databind-2.6.2.jar:\ lib/jackson-annotations-2.6.2.jar\ myapp.Main

Runningmyapplication

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 8

jackson-databind-2.6.2.jar

modulemyapp

modulemylib

jackson-annotations-2.6.2.jar

jackson-core-2.6.2.jar

Migratingfromthetopdown

modulejava.base

modulejava.logging

modulejava.xml

modulejava.sql

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Migratingfromthetopdown

• modulemyapprequires?

• modulemyappexports?

• modulemylibrequires?

• modulemylibexports?

9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 10

$ jdeps -s lib/myapp.jar lib/mylib.jarmyapp.jar -> lib/jackson-core-2.6.2.jarmyapp.jar -> lib/jackson-databind-2.6.2.jarmyapp.jar -> mylib.jarmyapp.jar -> java.basemyapp.jar -> java.sqlmylib.jar -> java.base

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 11

// src/mylib/module-info.javamodule mylib { requires java.base; exports com.myapp.lib.util to myapp;}

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 12

// src/myapp/module-info.javamodule myapp { requires mylib; requires java.base; requires java.sql; ??? requires jackson.core ??? ??? requires jackson.databind ???}

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 13

Ifonly…

jackson-databind-2.6.2.jar

jackson-core-2.6.2.jar

jackson-annotations-2.6.2.jar

modulejackson.core

modulejackson.databind

modulejackson.annotations

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 14

// src/myapp/module-info.javamodule myapp { requires mylib; requires java.base; requires java.sql; requires jackson.core; requires jackson.databind;}

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 15

modulejackson.databind

modulemyapp

modulejava.base

modulejava.logging

modulemylib

modulejava.xml

modulejava.sql

modulejackson.annotations

modulejackson.core

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Automaticmodules

• “Real”modules

• Nochangestosomeoneelse’sJARfile:-)

• ModulenamederivedfromJARfilename

• Exportsallitspackages• Requiresallothermodules

16

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 17

modulemyapp

modulemylib

modulejackson.databind

modulejackson.annotations

modulejackson.core

modulejava.xml

modulejava.sql

modulejava.logging

modulejava.base

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 18

modulemyapp

modulemylib

modulejackson.databind

import com.fasterxml.jackson.databind.ObjectMapper;...ObjectMapper mapper = new ObjectMapper();MyValue value = mapper.readValue("{\"name\":\"Bob\", \"age\":13}", MyValue.class);

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 19

// src/myapp/module-info.javaweak module myapp { requires mylib; requires java.base; requires java.sql; requires jackson.core; requires jackson.databind;}

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 20

modulemyapp

modulemylib

modulejackson.databind

modulejackson.annotations

modulejackson.core

modulejava.xml

modulejava.sql

modulejava.logging

modulejava.base

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 21

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

$ javac --module-path lib --module-source-path src -d mods …

$ jar --create --file mlib/mylib.jar -C mods/mylib .

$ jar --create --file mlib/myapp.jar -C mods/myapp . \ --main-class myapp.Main

22

lib/jackson-core-2.6.2.jarlib/jackson-databind-2.6.2.jarlib/jackson-annotations-2.6.2.jar

src/myapp/module-info.javasrc/myapp/...

src/mylib/module-info.javasrc/mylib/...

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 23

$ java --module-path mlib:lib —m myapp

$ java -cp \ lib/myapp.jar:\ lib/mylib.jar:\ lib/jackson-core-2.6.2.jar:\ lib/jackson-databind-2.6.2.jar:\ lib/jackson-annotations-2.6.2.jar \ myapp.Main

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

LibraryMigration

24

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 25

jackson-databind-2.6.2.jar

myapp.jar

modulejava.base

modulejava.logging

mylib.jar

modulejava.xml

modulejava.sql

jackson-annotations-2.6.2.jar

jackson-core-2.6.2.jar

SampleScenario

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 26

modulejackson.databind

myapp.jar

modulejava.base

modulejava.logging

mylib.jar

modulejava.xml

modulejava.sql

modulejackson.annotations

modulejackson.core

Migratingfromthebottomup

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Migratingfromthebottom

• modulejackson.corerequires?

• modulejackson.coreexports?

• modulejackson.databindrequires?

• modulejackson.databindexports?

• modulejackson.annotationsrequires?

• modulejackson.annotationsexports?

27

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Requires?

28

$ jdeps -s lib/jackson*.jar jackson-annotations-2.6.2.jar -> java.base jackson-core-2.6.2.jar -> java.base jackson-databind-2.6.2.jar -> lib/jackson-annotations-2.6.2.jar jackson-databind-2.6.2.jar -> lib/jackson-core-2.6.2.jar jackson-databind-2.6.2.jar -> java.base jackson-databind-2.6.2.jar -> java.sql jackson-databind-2.6.2.jar -> java.xml

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 29

jackson.databind

jackson.corejava.sql

jackson.annotations java.xml

java.base

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Creatingthemodule-info.javaforeachmodule

30

$ jdeps —-gen-module-info src *.jar writing to src/jackson.annotations/module-info.java writing to src/jackson.databind/module-info.java writing to src/jackson.core/module-info.java

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 31

// src/jackson.databind/module-info.java module jackson.databind { requires transitive jackson.annotations; requires transitive jackson.core; requires java.logging; requires transitive java.sql; requires transitive java.xml; exports com.fasterxml.jackson.databind; exports com.fasterxml.jackson.databind.annotation; exports com.fasterxml.jackson.databind.cfg; exports com.fasterxml.jackson.databind.deser; exports com.fasterxml.jackson.databind.deser.impl; exports com.fasterxml.jackson.databind.jsontype; exports com.fasterxml.jackson.databind.jsontype.impl; exports com.fasterxml.jackson.databind.module; exports com.fasterxml.jackson.databind.node; exports com.fasterxml.jackson.databind.ser; exports com.fasterxml.jackson.databind.ser.impl; exports com.fasterxml.jackson.databind.ser.std; exports com.fasterxml.jackson.databind.type; exports com.fasterxml.jackson.databind.util; }

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 32

// src/jackson.databind/module-info.java module jackson.databind { requires transitive jackson.annotations; requires transitive jackson.core; requires java.logging; requires transitive java.sql; requires transitive java.xml; exports com.fasterxml.jackson.databind; exports com.fasterxml.jackson.databind.annotation; exports com.fasterxml.jackson.databind.cfg; exports com.fasterxml.jackson.databind.deser; exports com.fasterxml.jackson.databind.deser.impl; exports com.fasterxml.jackson.databind.jsontype; exports com.fasterxml.jackson.databind.jsontype.impl; exports com.fasterxml.jackson.databind.module; exports com.fasterxml.jackson.databind.node; exports com.fasterxml.jackson.databind.ser; exports com.fasterxml.jackson.databind.ser.impl; exports com.fasterxml.jackson.databind.ser.std; exports com.fasterxml.jackson.databind.type; exports com.fasterxml.jackson.databind.util; }

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 33

src/jackson.core/module-info.java src/jackson.core/...

src/jackson.databind/module-info.java src/jackson.databind/...

src/jackson.annotations/module-info.java src/jackson.annotations/...

$ javac --module-source-path src -d mods $(find src -name “*.java”)

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 34

$ javac --module-source-path src -d mods ...

$ jar --create --file mlib/jackson-core-2.6.2.jar \ —-module-version 2.6.2 -C mods/jackson.core .

$ jar --create --file mlib/jackson-databind-2.6.2.jar \ —-module-version 2.6.2 -C mods/jackson.databind .

$ jar --create --file mlib/jackson-annotations-2.6.2.jar \ —-module-version 2.6.2 -C mods/jackson.annotations .

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 35

modulejackson.databind

modulejava.logging

modulejava.sql

modulejackson.core

modulejackson.annotations

myapp.jar mylib.jar

modulejava.base

modulejava.xml

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 36

$ java -cp \ lib/myapp.jar:\ lib/mylib.jar:\ lib/jackson-core-2.6.2.jar:\ lib/jackson-databind-2.6.2.jar:\ lib/jackson-annotations-2.6.2.jar \ myapp.Main

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 37

$ java --module-path mlib \ --add-modules jackson.databind \ -cp lib/myapp.jar:lib/mylib.jar myapp.Main

$ java -cp \ lib/myapp.jar:\ lib/mylib.jar:\ lib/jackson-core-2.6.2.jar:\ lib/jackson-databind-2.6.2.jar:\ lib/jackson-annotations-2.6.2.jar \ myapp.Main

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Puttingitalltogether

38

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 39

modulejackson.databind

modulejava.logging

modulejava.sql

modulejackson.core

modulejackson.annotations

modulejava.base

modulejava.xml

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 40

modulejackson.databind

modulejava.logging

modulejava.sql

modulejackson.core

modulejackson.annotations

modulejava.base

modulejava.xml

modulemyapp

modulemylib

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 41

$ ls -1 mlib myapp.jar mylib.jar jackson-core-2.6.2.jar jackson-databind-2.6.2.jar jackson-annotations-2.6.2.jar

$ java --module-path mlib -m myapp

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Linking

42

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 43

$ jlink --module-path $JDKMODS:mlib --add-modules myapp \ --compress=2 --strip-debug —-output myimage

$ du -ks myimage 26000 myimage

$ ls myimage/bin myapp java keytool

$ myimage/bin/java --list-modules myapp mylib jackson.annotations@2.6.2 jackson.core@2.6.2 jackson.databind@2.6.2 java.base@9 java.logging@9 java.sql@9 java.xml@9

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 44

$ myimage/bin/java -m myapp Greetings from myapp, here’s some json!

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 45

$ myimage/bin/myapp Greetings from myapp, here’s some json!

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw

Summary

• Freedomtoadoptmodulesatyourownpace

• Modularizeyourapplicationbeforeitslibraries

• Modularizelibrariesindependently

• Differentkindsofmodules

• Explicitvs.automatic

• Strongvs.weak

46

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 47

Goforthandmodularize!

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOneJigsaw

Othersessions,mostlythisroom• PrepareforJDK9:Tues@2.30pm

• IntroductiontoModularDevelopment:Wed@3pm

• ModulesandServices:Tues@11.00am,Thur@2.30pm

• ProjectJigsaw:UnderTheHood:Tues@4pm

• ProjectJigsawHackSession:Wed@8.30am

48

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.#JavaOne#Jigsaw 49

MoreInformation

OpenJDKProjectJigsaw

http://openjdk.java.net/projects/jigsaw/

mailto:jigsaw-dev@openjdk.java.net

EarlyAccessBuilds

https://jdk9.java.net/jigsaw/

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

50

top related