Как запустить банку котлина в песочнице? - PullRequest
0 голосов
/ 29 января 2019

Итак, последние несколько дней я возился, пытаясь запустить 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,Эти классы работают под ограниченным загрузчиком классов, который не имеет разрешений.Затем с помощью размышлений я пытаюсь получить некоторые аннотации этих классов.

Я думаю, это не имеет ничего общего с ошибкой, которую я получаю (в противном случае я рад предоставить некоторый код для этого, а также).

Я знаю, что родительский загрузчик классов ограниченного загрузчика классов имеет эти ресурсы (потому что без ограничений он работает).Итак, какое разрешение я мог бы дать этому ограниченному загрузчику классов, чтобы я мог получить доступ к этому ресурсу, не предоставляя загрузчику классов много прав и не нарушая песочницу?

Также я рад, если кто-то получил какие-то другие указатели, если есть другойподход к реализации такой «баночки с песочницей».

...