Итак, последние несколько дней я возился, пытаясь запустить jar-файлы в песочнице.
Я нашел этот пост в блоге Jens Nordahl Плагин для песочницы в Java, который, я думаю, дает действительно хороший короткий пример песочницы для jar-файла и дает ему только определенные разрешения.
Так что он работает нормально, пока я не удалю AllPermissions из модуля.
Caused by: java.lang.IllegalStateException: Resource not found in classpath: kotlin/kotlin.kotlin_builtins
at kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins.BuiltInsLoaderImpl.createBuiltInPackageFragmentProvider(BuiltInsLoaderImpl.kt:55)
at kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins.BuiltInsLoaderImpl.createPackageFragmentProvider(BuiltInsLoaderImpl.kt:33)
at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.createBuiltInsModule(KotlinBuiltIns.java:127)
at kotlin.reflect.jvm.internal.impl.builtins.jvm.JvmBuiltIns.(JvmBuiltIns.kt:43)
at kotlin.reflect.jvm.internal.impl.builtins.jvm.JvmBuiltIns.(JvmBuiltIns.kt:18)
at kotlin.reflect.jvm.internal.components.RuntimeModuleData$Companion.create(RuntimeModuleData.kt:58)
at kotlin.reflect.jvm.internal.ModuleByClassLoaderKt.getOrCreateModule(moduleByClassLoader.kt:58)
at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data$moduleData$2.invoke(KDeclarationContainerImpl.kt:37)
at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data$moduleData$2.invoke(KDeclarationContainerImpl.kt:34)
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:92)
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data.getModuleData(KDeclarationContainerImpl.kt)
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:47)
at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:44)
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:92)
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
at kotlin.reflect.jvm.internal.KClassImpl$Data.getDescriptor(KClassImpl.kt)
at kotlin.reflect.jvm.internal.KClassImpl$Data$annotations$2.invoke(KClassImpl.kt:56)
at kotlin.reflect.jvm.internal.KClassImpl$Data$annotations$2.invoke(KClassImpl.kt:44)
at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:92)
at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:31)
at kotlin.reflect.jvm.internal.KClassImpl$Data.getAnnotations(KClassImpl.kt)
at kotlin.reflect.jvm.internal.KClassImpl.getAnnotations(KClassImpl.kt:181)
at core.CoreClass.(CoreClass.kt:18)
at myModule.MyClass(MyClass.kt:17)
at myModule.ModuleProvider.(ModuleProvider.kt:14)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.util.ServiceLoader$ProviderImpl$2.run(ServiceLoader.java:787)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:792)
... 65 more
Насколько я понимаю, это какой-то предварительно скомпилированный материал, который загружается в classpath?
Просто чтобы объяснить, я загружаю ModuleProvider через ServiceLoader, который предоставляет мне некоторые классы из jar,Эти классы работают под ограниченным загрузчиком классов, который не имеет разрешений.Затем с помощью размышлений я пытаюсь получить некоторые аннотации этих классов.
Я думаю, это не имеет ничего общего с ошибкой, которую я получаю (в противном случае я рад предоставить некоторый код для этого, а также).
Я знаю, что родительский загрузчик классов ограниченного загрузчика классов имеет эти ресурсы (потому что без ограничений он работает).Итак, какое разрешение я мог бы дать этому ограниченному загрузчику классов, чтобы я мог получить доступ к этому ресурсу, не предоставляя загрузчику классов много прав и не нарушая песочницу?
Также я рад, если кто-то получил какие-то другие указатели, если есть другойподход к реализации такой «баночки с песочницей».