Я хочу загрузить определенные jar-файлы в ScriptEngineManager
, используя определенный ClassLoader
Этот конструктор загружает реализации ScriptEngineFactory, видимые для данного ClassLoader, используя механизм поставщика услуг.
Проблема, когда я пытался создать Загрузчик классов
File file = new File("c:\\myclasses\\");
try {
// Convert File to a URL
URL url = file.toURI().toURL(); // file:/c:/myclasses/
URL[] urls = new URL[]{url};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls)
И я получаю также класс, которого не было в классенапример Spring
Class cls1 = cl.loadClass("org.springframework.http.HttpStatus");
Как мне создать чистый загрузчик классов только с определенными классами папок?
EDIT
Если это невозможно, можноЯ использую в Groovy скрипт что-то эквивалентное Rhino's ClassShutter
private static void setJavaClassesVisibleInvisibleSandbox(Context cx)
{
cx.setClassShutter(new ClassShutter()
{
public boolean visibleToScripts(String className)
{
// No Java classes allowed inside scripts
EDIT
При попытке @ Vinz243 CustomClassLoader
Решение не удалось загрузить классы для файлов классов или файлов JAR из определенной папки, даже попытался rt.jar
java.lang.SecurityException: Prohibited package name: java.lang
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:662)
at java.lang.ClassLoader.defineClass(ClassLoader.java:761)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at com.CustomClassLoader.loadClass(CustomClassLoader.java:15)