Maison  >  Article  >  Java  >  Comment résoudre les erreurs « Impossible de dériver le descripteur de module » dans Java 9 avec les noms de modules générés automatiquement ?

Comment résoudre les erreurs « Impossible de dériver le descripteur de module » dans Java 9 avec les noms de modules générés automatiquement ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 03:05:18992parcourir

How to Resolve

Impossible de dériver le descripteur de module pour les noms de modules générés automatiquement dans Java 9

Lorsque vous utilisez Java 9, vous pouvez rencontrer une erreur en essayant pour ajouter une dépendance avec un nom de module généré automatiquement contenant un mot-clé réservé, tel que "native". Cette erreur se produit car les noms de modules Java 9 doivent suivre des conventions de dénomination spécifiques et "natif" n'est pas un identifiant Java valide.

Une approche pour résoudre ce problème consiste à modifier le fichier JAR de la dépendance en ajoutant un "META-INF /MANIFEST.MF" avec un attribut "Automatic-Module-Name". Cet attribut spécifie le nom du module à utiliser lorsque le JAR est converti en module automatique.

Par exemple :

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${netty.version}</version>
    <classifier>${epoll.os}</classifier>
</dependency>

// Add a manifest file to the dependency's JAR:
<manifestEntries>
    <Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name>
</manifestEntries>

Alternativement, les propriétaires d'artefacts peuvent ajouter des déclarations de module à leur JAR en utilisant " "module-info.java". Ces déclarations définissent explicitement le nom du module et ses dépendances, ce qui peut aider à résoudre le problème des noms de module non valides. Cependant, cette approche nécessite une collaboration avec les propriétaires des bibliothèques concernées.

Selon les spécifications du système de modules Java, les noms de modules doivent suivre ces conventions de dénomination :

  • Les noms de modules doivent être constitués d'un ou plusieurs identifiants Java séparés par "." jetons.
  • Les noms de packages peuvent être utilisés comme noms de modules s'ils suivent les mêmes règles de dénomination, avec certaines exceptions pour les noms de domaine.
  • Si le nom de domaine contient des caractères spéciaux ou des mots-clés, il doit être converti en trait de soulignement ou ajouté à un trait de soulignement.
  • Les premiers chiffres ne sont pas autorisés dans les noms de modules, et les traits de soulignement peuvent être utilisés comme préfixes pour éviter ceci.

N'oubliez pas que l'utilisation des traits de soulignement dans Java 9 peut être délicate, car ils sont considérés comme des mots-clés. En tant que tel, évitez d'utiliser « natif » ou « par défaut » comme noms de modules ou de packages.

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:
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