introduction to modular development - openjdk.java.net · copyright © 2015, oracle and/or its...

Post on 29-Jul-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Introduction to Modular DevelopmentCON5118

Alan BatemanJava Platform Group, OracleOctober 2015

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

Sessions

Prepare for JDK 9

Introduction to Modular Development

Advanced Modular Development

Project Jigsaw: Under the Hood

Project Jigsaw Hack Session

2

2

3

1

4

5

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

What is a module?

3

com.foo.bar

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

What is a module?

4

com.foo.bar

com.foo.bar.alpha.Alphacom.foo.bar.alpha.AlphaFactorycom.foo.bar.beta.Betacom.foo.bar.beta.BetaBlocker:

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

module com.foo.bar { }

module-info.javacom/foo/bar/alpha/Alpha.javacom/foo/bar/alpha/AlphaFactory.javacom/foo/bar/beta/Beta.javacom/foo/bar/beta/BetaBlocker.java:

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

module com.foo.bar { requires com.foo.baz;} com.foo.bar

com.foo.baz

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

module com.foo.app { requires com.foo.bar; requires java.sql}

com.foo.app

com.foo.bar java.sql

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

com.foo.app

com.foo.bar

java.sql

com.foo.baz

java.base

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

com.foo.app

com.foo.bar

java.sql

com.foo.bazjava.loggingjava.xml

java.base

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

com.foo.app

java.logging

java.sql

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

com.foo.app

java.logging

java.sql

package java.sql;import java.util.logging.Logger;

public class Driver { public Logger getParentLogger() { .. } :}

Driver d = …d.getParentLogger().log(…)

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

com.foo.app

java.logging

java.sql

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

com.foo.app

java.logging

java.sqlmodule java.sql { requires public java.logging; :}

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

com.foo.app

com.foo.bar

java.sql

com.foo.bazjava.loggingjava.xml

java.base

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

module com.foo.bar { exports com.foo.bar.alpha; exports com.foo.bar.beta;}

com.foo.bar.alphacom.foo.bar.beta

com.foo.bar.internal

com.foo.bar

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

com.foo.app com.foo.bar

Accessibility

reads

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

com.foo.app com.foo.bar

Accessibility

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

public ⇏ accessible

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

Platform modules

19

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

$ java -listmodsjava.activation@9.0 java.annotations.common@9.0 java.base@9.0 java.compact1@9.0 java.compact2@9.0 java.compact3@9.0 java.compiler@9.0 java.corba@9.0 java.datatransfer@9.0 java.desktop@9.0 java.instrument@9.0 java.logging@9.0 java.management@9.0 java.naming@9.0 java.prefs@9.0 java.rmi@9.0 java.scripting@9.0 java.se@9.0 java.security.jgss@9.0 java.security.sasl@9.0

java.smartcardio@9.0 java.sql@9.0 java.sql.rowset@9.0 java.transaction@9.0 java.xml@9.0 java.xml.bind@9.0 java.xml.crypto@9.0 java.xml.ws@9.0 jdk.attach@9.0 jdk.charsets@9.0 jdk.compiler@9.0 jdk.crypto.ec@9.0 jdk.crypto.pkcs11@9.0 jdk.hotspot.agent@9.0 jdk.httpserver@9.0 jdk.jartool@9.0 jdk.javadoc@9.0 jdk.jcmd@9.0 jdk.jconsole@9.0 jdk.jdeps@9.0

jdk.jdi@9.0 jdk.jdwp.agent@9.0 jdk.jlink@9.0 jdk.jvmstat@9.0 jdk.localedata@9.0 jdk.management@9.0 jdk.naming.dns@9.0 jdk.naming.rmi@9.0 jdk.pack200@9.0 jdk.policytool@9.0 jdk.rmic@9.0 jdk.scripting.nashorn@9.0 jdk.sctp@9.0 jdk.security.auth@9.0 jdk.security.jgss@9.0 jdk.xml.bind@9.0 jdk.xml.dom@9.0 jdk.xml.ws@9.0 jdk.zipfs@9.0

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

Compilation$ javac -d mods/com.foo.baz \ src/com.foo.baz/module-info.java \ src/com.foo.baz/com/foo/baz/Bazooka.java \ :

src/com.foo.baz/module-info.javasrc/com.foo.baz/com/foo/baz/Bazooka.java

mods/com.foo.baz/module-info.classmods/com.foo.baz/com/foo/baz/Bazooka.class

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

$ java -modulepath dir1:dir2:dir3 …

module path

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

src/com.foo.bar/module-info.javasrc/com.foo.bar/com/foo/bar/alpha/Alpha.java:

23

Compilation$ javac -modulepath mods -d mods/com.foo.bar \ src/com.foo.bar/module-info.java \ src/com.foo.bar/com/foo/bar/alpha/Alpha.class \ :

mods/com.foo.bar/module-info.classmods/com.foo.bar/com/foo/bar/bar/Alpha.class:

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

$ java -modulepath mods -m com.foo.app/com.foo.app.MainGreetings from module com.foo.app!

module name main class

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

com.foo.app

com.foo.bar

java.sql

java.base

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

com.foo.app

com.foo.bar

java.sql

com.foo.bazjava.loggingjava.xml

java.base

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

[Resolve] Root module com.foo.app located[Resolve] (file:///d/mods/com.foo.app/)[Resolve] Module com.foo.bar located, required by com.foo.app[Resolve] (file:///d/mods/com.foo.bar/)[Resolve] Module java.base located, required by com.foo.app[Resolve] (jrt:/java.base)[Resolve] Module java.sql located, required by com.foo.app[Resolve] (jrt:/java.sql)[Resolve] Module com.foo.baz located, required by com.foo.bar[Resolve] (file:///d/mods/com.foo.baz/)[Resolve] Module java.logging located, required by java.sql[Resolve] (jrt:/java.logging)[Resolve] Module java.xml located, required by java.sql[Resolve] (jrt:/java.xml)[Resolve] Resolve completed[Resolve] com.foo.app[Resolve] com.foo.bar[Resolve] com.foo.baz[Resolve] java.base[Resolve] java.logging[Resolve] java.sql[Resolve] java.xmlGreetings from module com.foo.app!

$ java -Xdiag:resolver -mp mods -m com.foo.app/com.foo.app.Main

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

Packaging as modular JAR

$ jar --create --file mlib/app.jar \ --main-class com.foo.app.Main \ -C mods/com.foo.app .

mods/com.foo.app/module-info.classmods/com.foo.app/com/foo/app/Main.class:

module-info.classcom/foo/app/Main.class:

app.jar

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

$ jar --file mlib/app.jar -p

Name: com.foo.appRequires: com.foo.bar java.base [ MANDATED ] java.sqlMain class: com.foo.app.Main

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

$ java -mp mlib:mods -m com.foo.appGreetings from module com.foo.app!

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

classpath

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

module-info.classcom/foo/baz/Bazooka.class:

com.foo.baz (mlib/baz.jar)

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

module path

$ java -mp mlib -m myappmodule-info.classcom/foo/baz/Bazooka.class:

com.foo.baz (mlib/baz.jar)

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

classpath and module path

$ java -mp mlib -addmods com.foo.baz \ -cp app.jar com.foo.app.Main

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

Linking

jlink

modular run-timeimage

bin conf …

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

Linking

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

$ myimage/bin/java -listmodsjava.base@9.0

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

Linking

$ jlink --modulepath $JDKMODS:$MYMODS --addmods com.foo.app --output myimage

$ myimage/bin/java -listmodsjava.base@9.0java.logging@9.0java.sql@9.0java.xml@9.0com.foo.appcom.foo.barcom.foo.baz

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

Summary

• Introduced basic concepts• Introduced basic command lines to compile, run, package and link

37

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

Other sessions, this room

• Advanced Modular Development @ 2.30pm• Project Jigsaw: Under the Hood @ 5.30pm• Project Jigsaw Hack Session @ Tuesday 8.30am

38

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

More Information

OpenJDK Project Jigsaw page, this has links to all the JEPs

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

mailto:jigsaw-dev@openjdk.java.net

Early Access Builds

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

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

Safe Harbor StatementThe 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.

40

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

src/com.foo.app/module-info.javasrc/com.foo.app/com/foo/app/Main/javasrc/com.foo.bar/module-info.javasrc/com.foo.bar/com/foo/bar/alpha/Alpha.javasrc/com.foo.baz/module-info.javasrc/com.foo.baz/com/foo/baz/Bazooka.java

:

42

Multi-module compilation

$ javac -modulesourcepath src -d mods $(find src -name “*.java”)

mods/com.foo.app/module-info.classmods/com.foo.app/com/foo/app/Main.classmods/com.foo.baz/module-info.classmods/com.foo.baz/com/foo/baz/Bazooka.classmods/com.foo.bar/module-info.classmods/com.foo.bar/com/foo/bar/bar/Alpha.class:

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

Testing

$ javac -cp lib/junit.jar -mp mods -d testclasses \ test/com/foo/bar/alpha/test/AlphaTest.java

$ java -cp lib/junit.jar:testclasses -mp mods -addmods com.foo.bar \ org.junit.runner.JUnitCore com.foo.bar.alpha.test.AlphaTest

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

Testingcom.foo.bar

exportedpackages

notexported

testclasses

testclasses

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

Testing

com.foo.bar

test classes

junit.jar

org.junit.Assertorg.junit.Test:

-XaddReads

-Xmodule/-Xpatch

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

Testing

$ javac -cp lib/junit.jar -mp mods -d testmods/com.foo.bar -Xmodule:com.foo.bar \ test/com.foo.bar/com/foo/bar/alpha/AlphaTest.java

$ java -cp lib/junit.jar -mp mods -addmods com.foo.bar \ -Xpatch:testmods -XaddReads:com.foo.bar=ALL-UNNAMED \ org.junit.runner.JUnitCore com.foo.bar.alpha.AlphaTest

top related