Загружать классы из папки без указания пакета

У меня есть приложение, которое позволяет людям, используя абстрактный класс, писать свои собственные реализации. Я загружаю эти реализации как файлы .class из каталога. В настоящее время у меня есть следующее решение:

File classDir = new File("/users/myproject/classes/");

URL[] url = { classDir.toURI().toURL() };
URLClassLoader urlLoader = new URLClassLoader(url);

String filename;
for (File file : classDir.listFiles()) {
    filename = string.getFilenameWithoutExtension(file);
    if (filename.equals(".") || filename.equals("..") || filename.startsWith("."))
        continue;

AbstractClass instance = (AbstractClass)urlLoader
    .loadClass("org.mypackage." + filename)
    .getConstructor(ConfigUtil.class, DatabaseUtil.class, StringUtil.class)
    .newInstance(config, database, string));

    instance.doSomething();
}

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

 java.lang.NoClassDefFoundError:
     MyClass (wrong name: org/mypackage/MyClass)

.

Теперь, исходя из архитектурной точки зрения, я думаю, что это очень плохо спроектировано, что классы, разработанные другими людьми, должны быть скомпилированы в МОЙ пакет при их загрузке.

Итак, я спрашиваю вас: есть ли способ загружать классы из файловой системы без необходимости указывать пакет, в котором они находятся?

5
задан F.P 8 February 2012 в 14:46
поделиться