SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
Java 9
Modules
antislashn.org Java 9 - modules 2 / 19
Classpath
● Java 8 et versions antérieures
● Recherche des classes à l’exécution
● classes de Java : fichier rt.jar
● classpath : chemins relatifs ou absolus vers
– des répertoires contenant des arborescence des packages
contenant les fichier .class
– des fichiers jar
● La compilation nécessite aussi un classpath
● qui peut être différent de celui de l'exécution
antislashn.org Java 9 - modules 3 / 19
Classpath
● Inconvénients du classpath
● le fichier rt.jar devient de plus en plus gros
● les classpath à la compilation et à l'exécution sont
différents
● le système de classpath est rudimentaire
– cf. slides suivants
● l'écriture du classpath peut être complexe
● la JVM ne contrôle pas au lancement de l'application si
l'ensemble des classes et jar sont présents
antislashn.org Java 9 - modules 4 / 19
Chargement des classes
● Le chargeur de classes est chargé de retrouver les
classes
● il y a une hiérarchie de chargeurs de classes
● il cherche d'abord dans les classes de la plateforme Java
● les classes sont chargées par
– un new, l'appel d'une méthode statique, un Class.forName()
● le chargement des classes est linéaire
– pas de notion de dépendances entre les classes
– il suit l'ordre de déclaration dans le classpath
antislashn.org Java 9 - modules 5 / 19
Chargement des classes
● Exemple
● deux versions d'une classe Foo
– dans deux jar différents
● foo-1.1.jar
● foo-1.2.jar
package org.antislashn.bar;
// version 1.1
public class Foo {
public void sayHello() {
System.out.println("Hello - Foo v1.1");
}
}
package org.antislashn.bar;
// version 1.2
public class Foo {
public void sayHello() {
System.out.println("Hello - Foo v1.2");
}
public void sayHello(String name) {
System.out.println("Hello, "+name);
}
}nouvelle méthode
antislashn.org Java 9 - modules 6 / 19
Chargement des classe
● Une classe utilise la version 1.2 de Foo
● les deux jars sont référencés dans le classpath
– la version 1.1 apparaît en premier
● ce n'est pas la bonne version qui est chargée
Foo foo = new Foo();
foo.sayHello("Gaston");
java -cp foo-1.1.jar:foo-main.jar:foo-1.2.jar org.antislashn.bar.Main
Exception in thread "main" java.lang.NoSuchMethodError:
org.antislashn.bar.Foo.sayHello(Ljava/lang/String;)V
at org.antislashn.bar.Main.main(Main.java:7)
antislashn.org Java 9 - modules 7 / 19
Apports de Java 9
● La version 9 apporte :
● modularisation de la JVM
– les modules sont visibles par : java --list-modules
● classpath sous forme d'arbre de dépendances
● vérification de la présence des modules nécessaires
● renforcement de la sécurité
● un même package ne peut pas être présent dans
plusieurs modules
antislashn.org Java 9 - modules 8 / 19
Renforcement de la sécurité
● Type public
● une classe est publique uniquement pour le module dans
lequel il est défini
– pas visible depuis un autre module
– seuls les packages explicitement exportés par un module sont
visibles par un autre module
antislashn.org Java 9 - modules 9 / 19
Déclaration des modules
● Fichier jar avec un fichier supplémentaire
● fichier module-info.java mis à la racine du jar
● ce fichier sera compilé en module-info.class
● module de base
– déclaration uniquement du nom
– convention afin de garantir un nom unique : reverse DNS
module org.antislashn.foo {
}
antislashn.org Java 9 - modules 10 / 19
classpath et module-path
● Le classpath est remplacé par le module-path
● argument --module-path ou -p
● possibilité de fournir des répertoires contenant les
modules
● le module-path ne contient que des répertoires
antislashn.org Java 9 - modules 11 / 19
Contenu module-info.java
● module module.name
● déclaration d'un module nommé module.name
● requires module.name
● spécifie que le module en cours dépend d'un module
module.name
● permet au module en cours d'utiliser les membres
publiques exportés par le module module.name
antislashn.org Java 9 - modules 12 / 19
Contenu module-info.java
● requires transitive module.name
● tout module qui dépend de ce module automatiquement
dépend du module module.name
● exports pkg.name
● le module en cours exporte les membres publiques du
package pkg.name vers tous les autres modules
antislashn.org Java 9 - modules 13 / 19
Contenu module-info.java
● exports pkg.name to module.name
● le module en cours exporte les membres publiques du
package pkg.name vers le module module.name
● uses class.name
● le module courant est consommateur du service
class.name
antislashn.org Java 9 - modules 14 / 19
Contenu module-info.java
● provides class.name with class.name.impl
● enregistre la classe class.name.impl comme service qui
fournit une implémentation de class.name
● open pkg.name
● permet à d'autres modules d'utiliser la réflexivité sur le
package pkg.name
● open pkg.name to module.name restreint l'ouverture au
module module.name
antislashn.org Java 9 - modules 15 / 19
Code legacy
● Un jar legacy, sans module-info.class peut-être
ajouté au module-path
● il devient un module automatique
● nommage des modules automatiques
– extension .jar est supprimée
– le numéro de version est retiré
– les caractères non alphanumériques sont remplacé par des
points
– les points répétitifs sont remplacés par un seul point
– exemple
my-lib-legacy-1.0-SNAPSHOT.jar → my.lib.legacy
antislashn.org Java 9 - modules 16 / 19
Code legacy
● Les modules automatiques exportent leurs membres
publiques
● Classpath et modules anonymes (unnamed)
● le classpath n'a pas totalement disparu
– l'option --class-path existe toujours
● les jars chargés par l'option --class-path sont placés
dans un module nommé "unnamed module"
antislashn.org Java 9 - modules 17 / 19
Options de la ligne de commande
● Un module ne peut accéder qu'à ce qui est
explicitement déclaré
● Certaines options de la ligne de commande
permettent de déroger à cette règle
● export, ajout de dépendance, ouverture à la réflexivité, ...
antislashn.org Java 9 - modules 18 / 19
Options de la ligne de commande
● --add-reads <module>=<target-module>(,<target-module>)*
● met à jour <module> pour lire <target-module>, sans
tenir compte de la déclaration de module.
● <target-module> peut être ALL-UNNAMED pour lire tous
les modules sans nom
● --add-exports <module>/<package>=<target-module>(,<target-module>)*
● met à jour <module> pour exporter <package> vers
<target-module>,sans tenir compte de la déclaration de
module.
● <target-module> peut être ALL-UNNAMED pour effectuer
un export vers tous les modules sans nom.
antislashn.org Java 9 - modules 19 / 19
Options de la lignes de commande
● --add-opens <module>/<package>=<target-module>(,<target-module>)*
● met à jour <module> pour ouvrir <package> vers
<target-module>, sans tenir compte de la déclaration de
module
● --patch-module <module>=<file>(;<file>)*
● remplacement ou augmentation d'un module avec des
classes et des ressources dans des fichiers ou des
répertoires JAR.

Contenu connexe

Tendances (20)

JAVA Chapitre1
JAVA Chapitre1 JAVA Chapitre1
JAVA Chapitre1
 
Cours java
Cours javaCours java
Cours java
 
JAVA
JAVAJAVA
JAVA
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
Introduction a Java
Introduction a JavaIntroduction a Java
Introduction a Java
 
Exceptions
ExceptionsExceptions
Exceptions
 
Cours de JAVA de base
Cours de JAVA  de baseCours de JAVA  de base
Cours de JAVA de base
 
Pluggable annotation processing api
Pluggable annotation processing apiPluggable annotation processing api
Pluggable annotation processing api
 
JAVA Chapitre7
JAVA Chapitre7JAVA Chapitre7
JAVA Chapitre7
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
Tp n 4 linux
Tp n 4 linuxTp n 4 linux
Tp n 4 linux
 
JAVA Chapitre6
JAVA Chapitre6JAVA Chapitre6
JAVA Chapitre6
 
Jenkins
JenkinsJenkins
Jenkins
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfaces
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Solutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScriptSolutions Linux 2008 - JavaScript
Solutions Linux 2008 - JavaScript
 
JAVA Chapitre2
JAVA Chapitre2JAVA Chapitre2
JAVA Chapitre2
 
JAVA Chapitre8
JAVA Chapitre8JAVA Chapitre8
JAVA Chapitre8
 
Java 8 - lambda
Java 8 - lambdaJava 8 - lambda
Java 8 - lambda
 

Similaire à Java 9 modules

MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueAlexis Hassler
 
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueDevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueAlexis Hassler
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Jean-Michel Doudoux
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Jean-Michel Doudoux
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Jean-Michel Doudoux
 

Similaire à Java 9 modules (7)

MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presque
 
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presqueDevoxxFR 2013 - Le classpath n'est pas mort, mais presque
DevoxxFR 2013 - Le classpath n'est pas mort, mais presque
 
XB-Java.ppt
XB-Java.pptXB-Java.ppt
XB-Java.ppt
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
#7 Migration
#7 Migration#7 Migration
#7 Migration
 

Plus de Franck SIMON

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumFranck SIMON
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMXFranck SIMON
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method EditorFranck SIMON
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuéesFranck SIMON
 
Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 
Java scripting api
Java scripting apiJava scripting api
Java scripting apiFranck SIMON
 

Plus de Franck SIMON (15)

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
Java 8 - DateTime
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTime
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimum
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMX
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
 
Squid
SquidSquid
Squid
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
jQuery
jQueryjQuery
jQuery
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
 

Dernier

SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxmmatar2
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxAsmaa105193
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxMartin M Flynn
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxrababouerdighi
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 

Dernier (20)

SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptx
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. Marocpptx
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptx
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptx
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 

Java 9 modules

  • 2. antislashn.org Java 9 - modules 2 / 19 Classpath ● Java 8 et versions antérieures ● Recherche des classes à l’exécution ● classes de Java : fichier rt.jar ● classpath : chemins relatifs ou absolus vers – des répertoires contenant des arborescence des packages contenant les fichier .class – des fichiers jar ● La compilation nécessite aussi un classpath ● qui peut être différent de celui de l'exécution
  • 3. antislashn.org Java 9 - modules 3 / 19 Classpath ● Inconvénients du classpath ● le fichier rt.jar devient de plus en plus gros ● les classpath à la compilation et à l'exécution sont différents ● le système de classpath est rudimentaire – cf. slides suivants ● l'écriture du classpath peut être complexe ● la JVM ne contrôle pas au lancement de l'application si l'ensemble des classes et jar sont présents
  • 4. antislashn.org Java 9 - modules 4 / 19 Chargement des classes ● Le chargeur de classes est chargé de retrouver les classes ● il y a une hiérarchie de chargeurs de classes ● il cherche d'abord dans les classes de la plateforme Java ● les classes sont chargées par – un new, l'appel d'une méthode statique, un Class.forName() ● le chargement des classes est linéaire – pas de notion de dépendances entre les classes – il suit l'ordre de déclaration dans le classpath
  • 5. antislashn.org Java 9 - modules 5 / 19 Chargement des classes ● Exemple ● deux versions d'une classe Foo – dans deux jar différents ● foo-1.1.jar ● foo-1.2.jar package org.antislashn.bar; // version 1.1 public class Foo { public void sayHello() { System.out.println("Hello - Foo v1.1"); } } package org.antislashn.bar; // version 1.2 public class Foo { public void sayHello() { System.out.println("Hello - Foo v1.2"); } public void sayHello(String name) { System.out.println("Hello, "+name); } }nouvelle méthode
  • 6. antislashn.org Java 9 - modules 6 / 19 Chargement des classe ● Une classe utilise la version 1.2 de Foo ● les deux jars sont référencés dans le classpath – la version 1.1 apparaît en premier ● ce n'est pas la bonne version qui est chargée Foo foo = new Foo(); foo.sayHello("Gaston"); java -cp foo-1.1.jar:foo-main.jar:foo-1.2.jar org.antislashn.bar.Main Exception in thread "main" java.lang.NoSuchMethodError: org.antislashn.bar.Foo.sayHello(Ljava/lang/String;)V at org.antislashn.bar.Main.main(Main.java:7)
  • 7. antislashn.org Java 9 - modules 7 / 19 Apports de Java 9 ● La version 9 apporte : ● modularisation de la JVM – les modules sont visibles par : java --list-modules ● classpath sous forme d'arbre de dépendances ● vérification de la présence des modules nécessaires ● renforcement de la sécurité ● un même package ne peut pas être présent dans plusieurs modules
  • 8. antislashn.org Java 9 - modules 8 / 19 Renforcement de la sécurité ● Type public ● une classe est publique uniquement pour le module dans lequel il est défini – pas visible depuis un autre module – seuls les packages explicitement exportés par un module sont visibles par un autre module
  • 9. antislashn.org Java 9 - modules 9 / 19 Déclaration des modules ● Fichier jar avec un fichier supplémentaire ● fichier module-info.java mis à la racine du jar ● ce fichier sera compilé en module-info.class ● module de base – déclaration uniquement du nom – convention afin de garantir un nom unique : reverse DNS module org.antislashn.foo { }
  • 10. antislashn.org Java 9 - modules 10 / 19 classpath et module-path ● Le classpath est remplacé par le module-path ● argument --module-path ou -p ● possibilité de fournir des répertoires contenant les modules ● le module-path ne contient que des répertoires
  • 11. antislashn.org Java 9 - modules 11 / 19 Contenu module-info.java ● module module.name ● déclaration d'un module nommé module.name ● requires module.name ● spécifie que le module en cours dépend d'un module module.name ● permet au module en cours d'utiliser les membres publiques exportés par le module module.name
  • 12. antislashn.org Java 9 - modules 12 / 19 Contenu module-info.java ● requires transitive module.name ● tout module qui dépend de ce module automatiquement dépend du module module.name ● exports pkg.name ● le module en cours exporte les membres publiques du package pkg.name vers tous les autres modules
  • 13. antislashn.org Java 9 - modules 13 / 19 Contenu module-info.java ● exports pkg.name to module.name ● le module en cours exporte les membres publiques du package pkg.name vers le module module.name ● uses class.name ● le module courant est consommateur du service class.name
  • 14. antislashn.org Java 9 - modules 14 / 19 Contenu module-info.java ● provides class.name with class.name.impl ● enregistre la classe class.name.impl comme service qui fournit une implémentation de class.name ● open pkg.name ● permet à d'autres modules d'utiliser la réflexivité sur le package pkg.name ● open pkg.name to module.name restreint l'ouverture au module module.name
  • 15. antislashn.org Java 9 - modules 15 / 19 Code legacy ● Un jar legacy, sans module-info.class peut-être ajouté au module-path ● il devient un module automatique ● nommage des modules automatiques – extension .jar est supprimée – le numéro de version est retiré – les caractères non alphanumériques sont remplacé par des points – les points répétitifs sont remplacés par un seul point – exemple my-lib-legacy-1.0-SNAPSHOT.jar → my.lib.legacy
  • 16. antislashn.org Java 9 - modules 16 / 19 Code legacy ● Les modules automatiques exportent leurs membres publiques ● Classpath et modules anonymes (unnamed) ● le classpath n'a pas totalement disparu – l'option --class-path existe toujours ● les jars chargés par l'option --class-path sont placés dans un module nommé "unnamed module"
  • 17. antislashn.org Java 9 - modules 17 / 19 Options de la ligne de commande ● Un module ne peut accéder qu'à ce qui est explicitement déclaré ● Certaines options de la ligne de commande permettent de déroger à cette règle ● export, ajout de dépendance, ouverture à la réflexivité, ...
  • 18. antislashn.org Java 9 - modules 18 / 19 Options de la ligne de commande ● --add-reads <module>=<target-module>(,<target-module>)* ● met à jour <module> pour lire <target-module>, sans tenir compte de la déclaration de module. ● <target-module> peut être ALL-UNNAMED pour lire tous les modules sans nom ● --add-exports <module>/<package>=<target-module>(,<target-module>)* ● met à jour <module> pour exporter <package> vers <target-module>,sans tenir compte de la déclaration de module. ● <target-module> peut être ALL-UNNAMED pour effectuer un export vers tous les modules sans nom.
  • 19. antislashn.org Java 9 - modules 19 / 19 Options de la lignes de commande ● --add-opens <module>/<package>=<target-module>(,<target-module>)* ● met à jour <module> pour ouvrir <package> vers <target-module>, sans tenir compte de la déclaration de module ● --patch-module <module>=<file>(;<file>)* ● remplacement ou augmentation d'un module avec des classes et des ressources dans des fichiers ou des répertoires JAR.