Zobacz documentation łączysz się:
obecnych ograniczeń AOT ...
nie może skompilować kod Java, który używa dynamicznie generowanych klas i kodu bajtowego (wyrażeń lambda wywołują dynamiczne).
Ograniczenia te można rozwiązać w przyszłych wydaniach.
więc dwa potencjalnych wyjaśnienia:
- metod, które nie kompilacji wpaść w znanych ograniczeń
- inaczej, to błąd w „nowy, eksperymentalny” produktu
Najprawdopodobniej "opcja 2" jest lepszym wytłumaczeniem - zobacz jeszcze raz swój link.
Zawiera listę metod, które nie kompilację wraz z błędem który występuje:
cat java.base-list.txt
# jaotc: java.lang.StackOverflowError
exclude sun.util.resources.LocaleNames.getContents()[[Ljava/lang/Object;
exclude sun.util.resources.TimeZoneNames.getContents()[[Ljava/lang/Object;
exclude sun.util.resources.cldr.LocaleNames.getContents()[[Ljava/lang/Object;
exclude sun.util.resources..*.LocaleNames_.*.getContents\(\)\[\[Ljava/lang/Object;
exclude sun.util.resources..*.LocaleNames_.*_.*.getContents\(\)\[\[Ljava/lang/Object;
exclude sun.util.resources..*.TimeZoneNames_.*.getContents\(\)\[\[Ljava/lang/Object;
exclude sun.util.resources..*.TimeZoneNames_.*_.*.getContents\(\)\[\[Ljava/lang/Object;
# java.lang.Error: Trampoline must not be defined by the bootstrap classloader
exclude sun.reflect.misc.Trampoline.<clinit>()V
exclude sun.reflect.misc.Trampoline.invoke(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
# JVM asserts
exclude com.sun.crypto.provider.AESWrapCipher.engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;
exclude sun.security.ssl.*
exclude sun.net.RegisteredDomain.<clinit>()V
# Huge methods
exclude jdk.internal.module.SystemModules.descriptors()[Ljava/lang/module/ModuleDescriptor;
I podczas sprawdzania źródeł, na przykład getContents() - nie ma lambda.
więc metody, które nie są kompilacja najprawdopodobniej spowodowane faktem, że nowy kompilator „nie jeszcze gotowy”, aby skutecznie opracować arbitralną kod źródłowy Javy!
Jestem bardzo wdzięczny za pomoc. Dzięki! – cwei