In einem Java 9-Projekt, würde ich gerne vertx.web
, die automatische Name für Modul io.vertx:vertx-web:3.4.2
gegeben. Nur zur Laufzeit erhalte ich den folgenden Fehler.Java 9 Service Provider und Groovy Extension Modules
Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for /Users/user/.gradle/caches/modules-2/files-2.1/io.vertx/vertx-web/3.4.2/eee42405acff13d37eb2a62256189d419f91aa4d/vertx-web-3.4.2.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class moduleFactory = io.vertx.groovy.ext.web.VertxPropertiesModuleFactory not in module
Es scheint, dass VertX-Web-Nutzung von Groovy Extension Modules macht. Aus diesem Grund existiert die Datei META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
. Java9 liest diese Datei zu Unrecht für Service Loading.
Gibt es eine Möglichkeit, diese Servicedatei zu ignorieren, da sie in einer Abhängigkeit liegt und ich sie nicht ändern kann?
META-INF/services wird in der JAR-Dateispezifikation für Service Provider-Konfigurationsdateien angegeben. Die Konfigurationsdateien für die Groovy Extension Modules scheinen Eigenschaftsdateien zu sein, sie müssen wirklich einen anderen Ort finden, um diese zu platzieren. –
Also denke ich, dass Groovy Spec geändert werden muss, um solche Konflikte zu vermeiden. Selbst wenn dies getan wäre, wären bestehende Abhängigkeiten immer noch unbrauchbar mit Java9. – thebignet
Dies wird in Vert.x 3.5.0 behoben, das Schreiben einer Java 9 modularen Anwendung mit Vert.x anonymen Modulen wird möglich sein https://github.com/ vert-x3/vertex-examples/tree/3.5.0-staging/java9-Beispiele –