W projekcie java 9, chciałbym wymagać vertx.web
, która jest automatyczną nazwą dla modułu io.vertx:vertx-web:3.4.2
. Tylko w czasie wykonywania otrzymam następujący błąd.Dostawca usług Java i moduły rozszerzeń Groovy
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
Wygląda na to, że vertx-web korzysta z Groovy Extension Modules. Dlatego istnieje plik META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
. Java9 odczytuje ten plik niepoprawnie dla Service Loading.
Czy istnieje sposób, aby zignorować ten plik usługi, ponieważ jest on zależny i nie mogę go zmienić?
META-INF/services jest określona w pliku JAR, który ma być użyty w plikach konfiguracyjnych dostawcy usług. Pliki konfiguracyjne dla modułów rozszerzeń Groovy wydają się być plikami właściwości, naprawdę muszą znaleźć inne miejsce do umieszczenia tych plików. –
Sądzę więc, że Groovy spec musi się zmienić, aby uniknąć takiego konfliktu. Nawet gdyby to zostało zrobione, istniejące zależności nadal byłyby nieużyteczne z Java9 – thebignet
zostanie to naprawione w Vert.x 3.5.0, pisząc modułową aplikację Java 9 z anonimowymi modułami Vert.x będzie możliwe https://github.com/ Przykłady vert-x3/vertx-examples/tree/3.5.0-staging/java9 –