Impossible de dériver le descripteur de module pour les noms de module générés automatiquement dans Java 9 ?
Dans Java 9, un problème courant survient lors de l'utilisation de nom de module généré automatiquement pour les dépendances contenant des mots-clés réservés tels que « natif ». Cela peut entraîner des erreurs telles que « module introuvable ».
Comprendre le problème
Java 9 a introduit le concept de modules, qui permettait l'encapsulation et l'isolation du code. Les modules ont des noms uniques qui doivent respecter les règles d'identification Java. Cependant, certains mots-clés, comme « natif », ne peuvent pas être utilisés dans le nom d'un module.
Solutions de contournement possibles
1. Utilisation de l'entrée manifeste de nom de module automatique
Une solution consiste à ajouter une entrée de manifeste « Nom de module automatique » au fichier JAR de la dépendance problématique. Cette entrée spécifie un nom de module personnalisé pour l'artefact, remplaçant celui généré automatiquement. Par exemple, vous pouvez modifier le fichier manifeste de la dépendance Netty Epoll pour inclure :
<Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name>
2. Ajout d'une déclaration de module au JAR
Les propriétaires d'artefacts peuvent également ajouter une déclaration de module à l'aide d'un fichier "module-info.java" à leur JAR. Ceci définit explicitement le nom du module, garantissant la compatibilité avec le système de modules de Java 9.
Conventions de dénomination alternatives
Selon les spécifications Java, les noms de module doivent être des noms de package valides. Pour répondre aux cas où le nom de domaine Internet d'une dépendance ne se traduit pas par un nom de package valide, les conventions suivantes sont suggérées :
Notez cependant que l'utilisation de traits de soulignement dans les noms de modules est déconseillée dans Java 9 en raison de son statut de mot-clé.
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!