Modulabhängigkeitsproblem in Java 9: „Moduldeskriptor für automatisch generierte Modulnamen kann nicht abgeleitet werden“
Die Unfähigkeit, einen Moduldeskriptor abzuleiten für automatisch generierte Modulnamen in Java 9 entsteht, wenn Abhängigkeiten von Bibliotheken deklariert werden, deren generierte Modulnamen reservierte Schlüsselwörter enthalten. Dies ist beim Epoll-Transport von Netty der Fall, der einen Modulnamen generiert, der das Schlüsselwort „native“ enthält.
Java 9 führt das Konzept von Modulen ein, die explizite Moduldeklarationen erfordern. Allerdings folgen automatisch generierte Modulnamen einer Konvention, die reservierte Schlüsselwörter enthalten kann, was zu Konflikten bei der expliziten Deklaration von Abhängigkeiten führt.
Lösung:
Um dieses Problem zu beheben, zwei Es stehen primäre Ansätze zur Verfügung:
1. Verpacken mit Automatic-Module-Name:
Bibliotheken können ihre Artefakte mit einer META-INF/MANIFEST.MF-Datei packen, die das Attribut „Automatic-Module-Name“ angibt. Dieses Attribut ermöglicht es Bibliotheken, einen anderen Modulnamen als den generierten zu definieren, wodurch Schlüsselwortkonflikte vermieden werden können.
2. Hinzufügen von Moduldeklarationen zu JARs durch Bibliotheksbesitzer:
Bibliotheksbesitzer können die erforderlichen Moduldeklarationen zu ihren JAR-Dateien hinzufügen, indem sie eine module-info.java-Datei verwenden. Dadurch werden die expliziten Modulabhängigkeiten deklariert und die Kompatibilität mit dem Modulsystem von Java 9 sichergestellt.
Erklärung:
Die Moduldeklarationssyntax von Java gibt an, dass Modulnamen aus gültigen Java-Identifikatoren bestehen müssen. Reservierte Schlüsselwörter wie „native“ sind als Bezeichner nicht zulässig, was zur Fehlermeldung „Ungültiger Modulname: ‚native‘ ist kein Java-Bezeichner“ führt.
Um dieses Problem zu beheben, ist die Systemspezifikation des Java-Moduls erforderlich empfiehlt, Bindestriche und andere Sonderzeichen in Unterstriche umzuwandeln und bestimmten Zeichen oder Schlüsselwörtern bei Bedarf Unterstriche voranzustellen. Es ist jedoch wichtig zu beachten, dass Unterstriche in Java 9 auch zu einem Schlüsselwort wurden, sodass ihre Verwendung als Präfixe mit Vorsicht erfolgen sollte.
Das obige ist der detaillierte Inhalt vonWie löst man den Java 9-Fehler „Moduldeskriptor für automatisch generierte Modulnamen konnte nicht abgeleitet werden'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!