Table des matières
Pourquoi Java a-t-il besoin de modules ?
Chemin de classe VS chemin de module
Modules en JAVA
Compatibilité ascendante
Erreurs courantes
Conclusion
Maison Java javaDidacticiel JPMS : système de modules de plate-forme Java

JPMS : système de modules de plate-forme Java

Sep 24, 2023 pm 05:05 PM

JPMS signifie Java Platform Module System. Il s'agit d'une nouvelle fonctionnalité de Java 9. Nos applications Java et packages Java peuvent être regroupés dans des modules Java à l'aide du système de modules Java. Les modules Java nous permettent de spécifier quels packages du module et les autres modules Java doivent pouvoir le voir. Le module Java répertorie également les modules Java requis pour son exécution.

Java Platform System est également connu sous le nom de Java Jigsaw ou Project Jigsaw. Le nom Jigsaw a été utilisé au moment de son développement. L’objectif principal de ce développement est de rendre le JRE plus modulaire. JPMS résout plusieurs problèmes majeurs, à savoir Classpath/JAR Hell, le JDK unique à grande échelle, les conflits de versions et les problèmes de sécurité.

Maintenant, approfondissons le système de modularité de la plate-forme Java pour en savoir plus à leur sujet.

Pourquoi Java a-t-il besoin de modules ?

Il est important de rappeler que JPMS est une fonctionnalité SE (Standard Edition) et affecte tous les niveaux de Java. Néanmoins, le but de ce patch est de permettre à la plupart des programmes de s'exécuter sans modification lors du passage de Java 8 à Java 9. Son objectif principal est de collecter les packages associés visibles par le module, tout en masquant certains composants aux utilisateurs externes du module.

Le lancement de JPMS a les objectifs déclarés suivants : 

  • Organisez facilement de grandes applications et bibliothèques.

  • Améliorer la sécurité

  • Améliorez les performances des applications

  • Gérer les pannes de plateforme pour les petits appareils.

  • Structure améliorée.

Chemin de classe VS chemin de module

Jusqu'à présent, le chemin de classe était le principal déterminant de ce à quoi un programme peut accéder lors de son exécution en Java. Bien qu’il joue ce rôle et qu’il soit clairement compris, le chemin de classe finit par devenir un grand compartiment indifférencié dans lequel toutes les dépendances sont branchées.

Le chemin du module ajoute un niveau au-dessus du chemin de classe. Il agit comme un espace de stockage pour les packages et sélectionne les packages auxquels une application peut accéder.

Chemin de classe

Chemin du module

S'applique à toutes les versions de Java

Uniquement disponible pour Java 9 et supérieur

Pas besoin de module-info.java

Avez-vous besoin de module-info.java

L'ajout de la bibliothèque ne fonctionne que si le projet n'a pas module-info.java

La bibliothèque peut fonctionner sans module-info.java

Ajoutez uniquement des bibliothèques non modulaires

Des modules et des non-modulaires peuvent être ajoutés

Faible encapsulation et abstraction

Encapsulation et abstraction fortes

La modularité est faible

Très modulaire

Impossible d'ajouter une bibliothèque à un projet en en ajoutant une partie au chemin de classe

Nous ne pouvons ajouter la partie requise de la bibliothèque au projet qu'en l'ajoutant au chemin du module

Modules en JAVA

JDK est composé de modules. Si vous utilisez le JDK sur votre système, vous disposez également du code source. Si vous ne le saviez pas, consultez ceci pour en savoir plus.

Il existe un répertoire /lib dans le répertoire d'installation du JDK. Dans ce répertoire vous trouverez un fichier src.zip. Extrayez-le ensuite dans le répertoire /src. Après cela, regardez dans le répertoire /src et recherchez le répertoire /java.base, vous trouverez ensuite le fichier module-info.java et enfin l'ouvrirez.

Après les commentaires Javadoc en haut, vous trouverez un dossier appelé modulesection.base, suivi de la ligne d'exportation. Le format est un peu ésotérique, nous n’entrerons donc pas trop dans les détails.

Comme vous pouvez le constater, le module java.base exporte plusieurs packages Java bien connus, dont java.io. C'est ainsi que fonctionne le module qui collecte les packages.

JPMS:Java 平台模块系统

Les exigences de la directive

sont à l’opposé de l’exportation. Par conséquent, le module spécifié peut nécessiter un module. Spécifiez le chemin du module de la même manière que vous fournissez le chemin de classe lors de l'exécution du compilateur Java sur le module. Cela permet de résoudre les dépendances.

Compatibilité ascendante

Java 9 a été créé dans un souci de compatibilité ascendante. Cependant, la nouvelle structure des modules constitue un changement majeur et vous pourriez rencontrer des problèmes, en particulier dans les bases de code volumineuses.

La commande suivante peut être utile pour résoudre les problèmes provenant de votre base de code - lorsque la commande jdeps pointe vers une classe, elle recherchera toutes les dépendances et les modules qui les nécessitent.

Si vos dépendances posent des problèmes, vous souhaiterez peut-être créer avec une version plus récente du package dont vous dépendez et compatible avec Java 9. Sinon, vous souhaiterez peut-être rechercher des options.

Erreurs courantes

Comment résoudre java.lang.NoClassDefFoundError -

Javax/xml/bind/JAXBException
Copier après la connexion

Il s'agit du code qui se plaint que la classe attribuée est introuvable car elle a été migrée vers un module et n'est pas visible pour le code consommateur. Il existe plusieurs solutions.

JPMS est une transition assez importante, donc son adoption prendra un certain temps. Heureusement, Java 8 étant une version supportée à long terme, il n’y a pas de besoin immédiat.

Cependant, à terme, il sera nécessaire que les anciens projets soient migrés, et que les nouveaux projets utilisent les modules à bon escient, afin peut-être de bénéficier d'une partie des avantages qui ont été apportés.

Conclusion

JPMS signifie Java Platform Module System et était également appelé puzzle de projet dans les premiers stades de développement. Cela permet aux développeurs d'organiser plus facilement des applications et des bibliothèques volumineuses. Il améliore la structure et augmente le niveau de sécurité de la plateforme. Il est également utilisé pour améliorer les performances des applications et est utile pour la décomposition de la plate-forme pour les appareils plus petits. L'idée principale derrière cela est de permettre une collection de packages associés visibles par un module, tout en masquant les éléments des consommateurs externes sur le module.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Musée à deux points: toutes les expositions et où les trouver
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Musée à deux points: toutes les expositions et où les trouver
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Mar 17, 2025 pm 05:35 PM

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance? Mar 17, 2025 pm 05:46 PM

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?

Comment puis-je implémenter des techniques de programmation fonctionnelle en Java? Comment puis-je implémenter des techniques de programmation fonctionnelle en Java? Mar 11, 2025 pm 05:51 PM

Comment puis-je implémenter des techniques de programmation fonctionnelle en Java?

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Mar 07, 2025 pm 06:12 PM

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités

Iceberg: L'avenir des tables de Data Lake Iceberg: L'avenir des tables de Data Lake Mar 07, 2025 pm 06:31 PM

Iceberg: L'avenir des tables de Data Lake

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux? Mar 17, 2025 pm 05:43 PM

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Mar 17, 2025 pm 05:44 PM

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?

See all articles