Загрузка классов, отсутствующих в пути к классам

Допустим, я скомпилировал скрипт 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 содержит пример того, как вы можете определить пользовательскую ссылку.

Другие вопросы по тегам