Heim  >  Artikel  >  Java  >  Wie kann der Fehler „Moduldeskriptor kann nicht abgeleitet werden' in Java 9 mit automatisch generierten Modulnamen behoben werden?

Wie kann der Fehler „Moduldeskriptor kann nicht abgeleitet werden' in Java 9 mit automatisch generierten Modulnamen behoben werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-25 03:05:18992Durchsuche

How to Resolve

Moduldeskriptor für automatisch generierte Modulnamen in Java 9 kann nicht abgeleitet werden

Bei der Verwendung von Java 9 kann es beim Versuch zu einem Fehler kommen um eine Abhängigkeit mit einem automatisch generierten Modulnamen hinzuzufügen, der ein reserviertes Schlüsselwort enthält, z. B. „native“. Dieser Fehler tritt auf, weil Java 9-Modulnamen bestimmten Namenskonventionen folgen müssen und „nativ“ kein gültiger Java-Bezeichner ist.

Ein Ansatz zur Lösung dieses Problems besteht darin, die JAR-Datei der Abhängigkeit durch Hinzufügen einer „META-INF“ zu ändern /MANIFEST.MF“-Datei mit einem „Automatic-Module-Name“-Attribut. Dieses Attribut gibt den Modulnamen an, der verwendet werden soll, wenn die JAR in ein automatisches Modul konvertiert wird.

Zum Beispiel:

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

Alternativ können Artefakteigentümer Moduldeklarationen zu ihrer JAR hinzufügen, indem sie „ module-info.java“-Dateien. Diese Deklarationen definieren explizit den Modulnamen und seine Abhängigkeiten, was dazu beitragen kann, das Problem mit ungültigen Modulnamen zu beheben. Dieser Ansatz erfordert jedoch die Zusammenarbeit mit den Eigentümern der betroffenen Bibliotheken.

Gemäß den Java Module System-Spezifikationen sollten Modulnamen diesen Namenskonventionen folgen:

  • Modulnamen müssen aus einem bestehen oder mehrere Java-Bezeichner, getrennt durch „.“ Tokens.
  • Paketnamen können als Modulnamen verwendet werden, wenn sie denselben Namensregeln folgen, mit bestimmten Ausnahmen für Domänennamen.
  • Wenn der Domänenname Sonderzeichen oder Schlüsselwörter enthält, sollte dies der Fall sein in einen Unterstrich umgewandelt oder mit einem Unterstrich angehängt.
  • Führende Ziffern sind in Modulnamen nicht zulässig und Unterstriche können als Präfixe verwendet werden um dies zu vermeiden.

Denken Sie daran, dass die Verwendung von Unterstrichen in Java 9 schwierig sein kann, da sie als Schlüsselwörter gelten. Vermeiden Sie daher die Verwendung von „native“ oder „default“ als Modulnamen oder Paketnamen.

Das obige ist der detaillierte Inhalt vonWie kann der Fehler „Moduldeskriptor kann nicht abgeleitet werden' in Java 9 mit automatisch generierten Modulnamen behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn