Próbuję uruchomić aplikację z Javą 9, ale niestety jedna z prostych zależności JAR, gdy próbuje załadować zasób przy użyciu classLoader.getResource(name)
, otrzymuje zamiast niej wartość null.Jak pozwolić modułowi automatycznemu znaleźć własne zasoby w Javie 9?
To, oczywiście, działa w Javie 8.
oświadczyłem zależny od modułu w pytaniu za pomocą pliku modułu, nawiązując do nazwy modułu przez jego nazwę słoik (okropny) i dodaje się słoik tak jak jest (bez dostosowywania dla środowiska Java 9) przy użyciu opcji --module-path
.
Oto moja przybliżona deklaracja plik modułu:
module my.mod {
requires ivy; // the file is called ivy-2.4.0.jar
}
I biegnę z tym poleceniem:
java --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod
Kiedy uruchomić aplikację, to działa dobrze, jeśli biblioteka nie próbują załaduj ten zasób ... ale jeśli tak, to dostaje NullPointerException
w linii, którą próbuje użyć zasobu.
Widzę, że zasób jest obecny we właściwej ścieżce w pliku jar.
Próbowałem uruchomiony mojej aplikacji zarówno jako słoik (pokazany powyżej) i tylko z plikami klas:
java --module-path modules-dir:ivy-2.4.0.jar -m my.module/my.Main
W tym ostatnim przypadku, błąd jest inny, ale powiązany: Ivy nie może nawet znaleźć plik właściwości, który próbuje załadować z własnego słoika!
Czy istnieje obejście problemu, czy jest to znany błąd, czy też robię coś nie tak?
Skąd wziąłeś Java 9? Czy jest wydany? 2017 06 15 –
Pobierz [SDKMAN] (http://sdkman.io/) i zainstaluj z 'sdk install java 9ea167'. Jest to wersja EA (Early Access). – Renato
Po prostu nie mogłem uzyskać odpowiedzi na pytanie, jaka jest relacja pliku my-mod.jar z plikiem modułu my.mod? Czy chcesz, aby plik my-mod.jar był zależny od ivy-2.4.0.jar? – chebus