Description
I have been investigating support for SubstrateVM and the nativeimage tool for Micronaut http://micronaut.io/
Micronaut produces largely reflection free DI and AOP, however does allow soft loading of classes.
Currently only one error occurs when preparing the image, which is probably a matter of supplying a correct reflection.json:
RecomputeFieldValue.ArrayIndexScale automatic substitution failed. The automatic substitution registration was attempted because a call to sun.misc.Unsafe.arrayIndexScale(Class) was detected in the static initializer of io.micronaut.caffeine.cache.UnsafeRefArrayAccess. Add a RecomputeFieldValue.ArrayIndexScale manual substitution for io.micronaut.caffeine.cache.UnsafeRefArrayAccess.
More fundamentally however, we rely on ServiceLoader.load(..)
and classLoader.getResources()
in a few places and these seem to be unimplemented? Calls to getClass().getClassLoader() return null
Is there an alternative way to load resources other than through the classloader? Can we provide an alternative to ServiceLoader.load(..)
?
We could certainly abstract the strategies for loading resources and service descriptors if there was an alternative way to get at these and a way to detect you are running on SubstrateVM (is there a way?)