Вы можете использовать только предоставленные рамки java.net.URLClassLoader
. Не нужно писать свои собственные. Он поддерживает загрузку классов из каталогов и JAR-файлов.
Предполагается, что любой URL, заканчивающийся символом '/', ссылается на каталог.
В противном случае предполагается, что URL ссылается на файл JAR, который будет
открывается при необходимости.
Также поддерживается родительский загрузчик классов. Если этот загрузчик классов не соответствует вашим требованиям, возможно, вы сможете более подробно указать, что вам нужно. И в любом случае, вы можете посмотреть на источник и получить собственный класс загрузчика классов, основанный на этом.
Вот краткий рабочий фрагмент кода, который должен продемонстрировать, как загрузить класс по имени из URLClassLoader:
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
// This URL for a directory will be searched *recursively*
URL classes =
new URL( "file:///D:/code/myCustomClassesAreUnderThisFolder/" );
ClassLoader custom =
new URLClassLoader( new URL[] { classes }, systemClassLoader );
// this class should be loaded from your directory
Class< ? > clazz = custom.loadClass( "my.custom.class.Name" );
// this class will be loaded as well, because you specified the system
// class loader as the parent
Class< ? > clazzString = custom.loadClass( "java.lang.String" );