String hello = "Salut à vous tous les zazous";
Chercher les classes
CLASSPATH
Hello var = new Hello();
java.lang.ClassLoader
loadClass(String name) : Class<?>
getResource(String name) : URLgetResourceAsStream(String name) : InputStream
getParent() : ClassLoader
BootstrapClassLoader
bootclasspath
java -Xbootclasspath/p:hello-lib.jar ...
java -Xbootclasspath:hello-rt.jar ...
java -Xbootclasspath/a:hello-lib.jar ...
DémonstrationBootstrapClassLoader
java -cp example.jar fr.sewatech.classpath.Count
System ClassLoader
java.lang.Integer
example.jar
java.lang.Integer
example.jar
Démonstration
java -Xbootclasspath/p:example.jar fr.sewatech.classpath.Count
java.lang.Integer
BootstrapClassLoader
java.lang.Integer
URLClassloader
System ClassLoader
Bootstrap ClassLoader
URL ClassLoader
URL ClassLoader
URL ClassLoader
Parentfirst
Parentfirst
Parentfirst
Démonstration
message-launcher
message-common
message-printer
message-service
message-service
System ClassLoader ParentFirst ClassLoader
Démonstration
message-launcher
message-common
message-printer
message-service
message-service
System ClassLoader LocalFirst ClassLoader
Démonstration
slf4j-api 1.5.11
slf4j-api 1.7.2
message-launcher
message-main
message-common
message-printer
message-service
Bundle-Name = Simple Bundle
Bundle-SymbolicName = simple-bundle
Bundle-Description = Simple Bundle
Bundle-Version = 1.0.1
Export-Package = fr.sewatech.mystuff.services
Import-Package = org.osgi.framework;version=1.3
OSGi
Bundle
JBoss Modules
java -jar jboss-modules.jar -mp path/to/modules
my.main.module.name
WildFly / JBoss EAP
Java SE
JBoss Modules
hibernate-infinispan-4.1.6.Final.jar
module.xml
hibernate-core-4.1.6.Final.jar
hibernate-entitymanager-4.1.6.Final.jar
modules
com
fr
org
...
org
hibernate
main
JBoss Modules
module.xml
resource
resource
resource
dependency slot
dependency slot
dependency slot
name slot
Jigsaw
Modularité des applicationsmodule-info.java
module message.service {
requires java.xml.bind;
requires message.common;
exports fr.sewatech.message;
}
Jigsaw
Compilation
javac --module-path modules \
-d target/classes/ \
$(find src/main/java/ -name "*.java")
Dependencies
module message.service {
requires message.printer;
requires slf4j.api;
}module message.printer {
requires transitive message.common;
}
message.service
message.printer
message.common
module message.service {
requires message.printer;
requires slf4j.api;
}
Dependencies
Automatic modules
message.service
slf4j.api
slf4j-api-1.5.2.
Dependencies
module message.service @ 1.0 {
requires message.printer @ 1.0;
requires slf4j.api @ 1.7;
}
Module version
Exports
Java accessibilitypublic for other modules
module message.service {
exports fr.sewatech.message;
}
Exports
Java accessibilitypublic for some modules
module java.base {
exports sun.reflect to
java.logging,
java.sql,
jdk.scripting.nashorn;
}
Exports
module message.service {
exports private java.security;
}
field.setAccessible(true);// => java.lang.reflect.InaccessibleObjectException
Refection
BootClassLoader
bootclasspath
java -Xbootclasspath/p:hello-lib.jar ...
java -Xbootclasspath:hello-rt.jar ...
java -Xbootclasspath/a:hello-lib.jar ...
Patch
Compile
Run
javac -Xmodule:java.base \
-d ../patch-classes \
src/java/lang/Integer.java
java --patch-module java.base=patch.jar \
--module-path jigsaw-modules \
-m misc.examples
Aller plus haw avec Jigsaw
Service Providers / Loaders
Versioning / Layers
Custom JRE : jlink
Migration : jdeps
...
Essayer...
https://jdk9.java.net/download/ Exécutable d'installation
https://jdk9.java.net/jigsaw/ Archive
Dernières évolutions de Jigsaw
Apprendre +
JavaOnehttp://openjdk.java.net/projects/jigsaw/talks/
Quick-Start Guidehttp://openjdk.java.net/projects/jigsaw/quick-start
The State of the Module Systemhttp://openjdk.java.net/projects/jigsaw/spec/sotms/