Допустим, я скомпилировал сценарий Groovy с помощью Groovyc, который сгенерировал один или несколько файлов .class в файловой системе. Как динамически добавить эти классы в путь к классам из приложения Java, чтобы загрузить их и вызвать их методы? Цель состоит в том, чтобы предварительно скомпилировать сценарии Groovy и сохранить их в базе данных, чтобы можно было выполнять оценку из скомпилированных версий сценариев.
Загрузка классов, отсутствующих в пути к классам
Ответы (2)
Вы можете создать экземпляр URLClassLoader. для загрузки новых классов из каталога:
URL dirUrl = new URL("file:/" + "path_to_dir" + "/"); // 1
URLClassLoader cl = new URLClassLoader(new URL[] {dirUrl},
getClass().class.getClassLoader()); // 2
Class loadedClass = cl.loadClass("com.xyz.MyClass");
MyClass obj = (MyClass) loadedClass.newInstance();
obj.doSomething();
Строка 1 создает URL
в каталоге, где находятся файлы .class.
Строка 2 создает новый экземпляр URLClassLoader
. Первый аргумент — это массив URL-адресов, которые будут использоваться в качестве источника. Вы можете указать несколько URL-адресов каталогов в массиве. Второй аргумент — это загрузчик классов, который станет родителем этого нового загрузчика классов. В качестве этого аргумента мы передаем загрузчик класса, выполняющего приведенный выше код.
Классы, загруженные дочерним загрузчиком классов, могут получить доступ к классам, загруженным родительским загрузчиком классов.
Вам нужно написать свой собственный загрузчик классов.
Эта ссылка на javadoc содержит пример того, как вы можете определить пользовательский.