Nie ma to już miejsca w aktualnych kompilacjach EA w języku Java 9. Pliki klas są teraz zawsze lokalizowalne, nawet jeśli są enkapsulowane w module.
Jest to konsekwencja enkapsulacji modułu Java 9, w której zasoby nie wyeksportowane nie są już dostępne za pośrednictwem interfejsu API
ClassLoader
. Pod kołdrą, Javassist wzywa
ClassLoader.getSystemClassLoader().findResource("java/io/Serializable.class");
zdobyć pliku klasy dla Serializable
. Następnie analizuje ten plik klasy i reprezentuje informacje podobnie do interfejsu API Java Reflect, ale bez ładowania klasy, co umożliwia jej edycję przed załadowaniem.
Do wersji Java 8 ten plik klasy był dostępny, ponieważ większość programów ładujących klasy polega na wyszukiwaniu pliku klasy przed załadowaniem go tak, że powyższe wywołanie zwróciło URL
wskazujące na plik. Od wersji Java 9 zasoby nazwanych modułów są dostępne tylko za pośrednictwem nowej metody API findResource(String, String)
, gdzie drugie argumenty nazywają moduł tej klasy.
Krótka odpowiedź brzmi: Javassist nie działa już z Javą 9 i żadna z wersji
its dependant projects. Jest to
known issue z obecną implementacją Java 9 i, mam nadzieję, zostanie poprawiony przed wydaniem.