Загрузка классов, отсутствующих в пути к классам - PullRequest
3 голосов
/ 28 июля 2010

Допустим, я скомпилировал скрипт Groovy с помощью Groovyc, который сгенерировал один или несколько файлов .class в файловой системе.Как из Java-приложения динамически добавлять эти классы в путь к классам, чтобы загружать их и вызывать их методы?Цель состоит в том, чтобы предварительно скомпилировать скрипты Groovy и сохранить их в базе данных, чтобы можно было выполнить оценку по скомпилированным версиям скриптов.

Ответы [ 2 ]

9 голосов
/ 28 июля 2010

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

Классы, загруженные дочерним загрузчиком классов, могут получить доступ к классам, загруженным родительским загрузчиком классов.

0 голосов
/ 28 июля 2010

Вам нужно написать собственный загрузчик классов.

Эта ссылка javadoc содержит пример того, как вы можете определить пользовательскую ссылку.

...