DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Java Zone»Comment exporter tous les modules vers tous les modules lors de l’exécution en Java
    Java Zone

    Comment exporter tous les modules vers tous les modules lors de l’exécution en Java

    octobre 19, 2021
    Comment exporter tous les modules vers tous les modules lors de l'exécution en Java
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    En raison du nouveau système de modules, Java 9 ne permet pas à une application par défaut de voir toutes les classes du JDK, contrairement à toutes les versions précédentes de Java. Si nous essayons d’accéder à un module réservé, nous obtenons une erreur comme celle-ci :
    module <module-name> does not "opens <package-name>" to unnamed module.

    Tout le monde sait que nous pouvons résoudre cette exception en utilisant les paramètres JVM --add-exports ou add-opens, mais que se passe-t-il si nous avons plus d’environnements et que nous ne voulons pas avoir à modifier les arguments JVM dans ces environnements ?

    Dans cette situation, Burningwave Core vient à notre secours en nous fournissant la méthode org.burningwave.core.assembler.StaticComponentContainer.Modules.exportAllToAll() cela nous permet d’exporter tous les modules dans tous les modules, résolvant ainsi notre problème. Cette méthode est appelée par défaut à l’initialisation de la classe org.burningwave.core.assembler.StaticComponentContainer. Ce comportement peut être modifié en incluant dans le dossier de base de votre chemin de classe un fichier nommé burningwave.static.properties qui contient une propriété nommée modules.export-all-to-all dont la valeur est false, nous laissant ainsi la possibilité d’appeler cette méthode manuellement.

    Noter: Il n’est pas nécessaire de mettre dans le burningwave.static.properties archiver toutes les propriétés présentes dans le lien relatif fourni précédemment) :

    Modules.exportAllToAll();
    //Now that we have called exportAllToAll () we can use any class of any module
    Class<?> bootClassLoaderClass = Class.forName("jdk.internal.loader.ClassLoaders$BootClassLoader");
    Constructor<? extends ClassLoader> constructor =
    	ClassLoader.getPlatformClassLoader().getClass().getDeclaredConstructor(bootClassLoaderClass);
    constructor.setAccessible(true);
    Class<?> classLoadersClass = Class.forName("jdk.internal.loader.ClassLoaders");
    Method bootClassLoaderRetriever = classLoadersClass.getDeclaredMethod("bootLoader");
    bootClassLoaderRetriever.setAccessible(true);
    ClassLoader newBuiltinclassLoader = constructor.newInstance(bootClassLoaderRetriever.invoke(classLoadersClass));
    System.out.println(newBuiltinclassLoader + " instantiated");

    Le composant Modules expose également d’autres méthodes pour une plus grande granularité :

    • export(String moduleNameFrom, String moduleNameTo)
    • exportPackage(String moduleNameFrom, String moduleNameTo, String... packageNames)
    • exportPackageToAll(String name, String... packageNames)
    • exportPackageToAllUnnamed(String name, String... packageNames)
    • exportToAll(String name)
    • exportToAllUnnamed(String name)

    Par conséquent, en référence à l’exemple ci-dessus, si nous voulons limiter l’export au package de notre intérêt, nous devons remplacer l’appel exportAllToAll() avec exportPackageToAllUnnamed("java.base", "java.net").

    À partir de là, vous pouvez télécharger/cloner le didacticiel partagé sur GitHub.

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.