2017-10-23 1 views
3

Ich benutze v3.7.0 des Plugins wie erforderlich und JDK 9.0.1. Ich habe zwei requires Anweisungen hinzugefügt, die jeweils auf ein jar im Klassenpfad verweisen (automatisches Modul). Das Modul-info.java kompiliert erfolgreich in Eclipse, nachdem ich die Jars in den Modulpfad verschoben habe. Maven gibt mir jedoch einen Compilerfehler, der sagt, dass einer von ihnen fehlt (seltsamerweise nicht der erste, der nur eine Zeile davor ist). Ich habe versucht, den Namen des automatischen Moduls zu überprüfen, aber ich bekomme einen Fehler von den Befehlen nur für dieses Glas. Was bedeutet dieser Fehler und wie behebe ich ihn, damit ich den richtigen Modulnamen ermitteln kann?module-info.java Kompilieren fehlgeschlagen mit Maven-Compiler-Plugin und automatische Module

Ich ersetzt meinen Benutzernamen in der Ausgabe unten. Das Glas in Frage hat eine ServiceLoader verwenden, ist aber nicht mit Java 9.

computerName:Commander-java username$ jar --file=/Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --describe-module 
Unable to derive module descriptor for: /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar 
Provider class com.username.rcf.server.TestCmdChain not in module 

computerName:Commander-java username$ java -p /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar --list-modules 
Error occurred during initialization of boot layer 
java.lang.module.FindException: Unable to derive module descriptor for /Users/username/.m2/repository/com/username/rcf/1.0/rcf-1.0.jar 
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class com.username.rcf.server.TestCmdChain not in module 

Die Antwort in How to deal with java keywords in auto generated module names in Java 9? hat einen anderen Fehler im Zusammenhang mit Verwendung eines Java-Kennung in dem Modulnamen zusammengestellt. Der automatische Jar-Name für mein Modul sollte rcf sein, da der Jar-Name rcf-1.0.jar ist. Der Fehler, den ich bekomme, ist auch anders.

+0

Mögliches Duplikat von [Wie behandelt man Java-Schlüsselwörter in automatisch generierten Modulnamen in Java 9?] (Https://stackoverflow.com/questions/46501388/how-to-deal-with-java-keywords-in- auto-generated-modul-name-in-java-9) ... \t Besitzen Sie das Artefakt 'rcf-1.0.jar'? – nullpointer

+0

Ja, ich besitze es. Ich habe keine Java-Bezeichner im Namen. Es ist nur RCF. Der Fehler scheint mit dem ServiceLoader zu tun zu haben, da die im Fehler angegebene Klasse eine Schnittstelle implementiert, die mit ServiceLoader verwendet wird, aber nicht sicher ist. Kann keinen Sinn daraus machen. – GabeV

+1

Zurückgezogen doppelte Abstimmung. Ya scheint wie das Implementierungspaket [befindet sich nicht im Modul] (https://stackoverflow.com/a/46881513/1746118) selbst. – nullpointer

Antwort

4

Während Modulbeschreibung der Inhalt irgendwelcher META-INF/services Konfigurationsdateien abgeleitet werden provides Erklärungen abgebildet.

Die Pakete, die nach den Diensten durchsucht werden, sind diejenigen, die Klassendateien enthalten.

Auch der Paketname für einzelne Klassen wird von ihrem vollständig qualifizierten Namen abgeleitet. Aus den gemeinsam genutzten Protokollen com.username.rcf.server wird der erwartete Paketname für den Dienst sein zur Verfügung gestellt werden, und dies wird wiederum in

provides x.y.z.TestCmdChainInterface with com.username.rcf.server.TestCmdChain 

Scheint, wie es kein solches Paket ist com.username.rcf.server in Ihrem Modul vorhanden ist.

Verwandte Themen