Я предполагаю, что вам нужно загрузить набор классов, расположенных в файле JAR или любом другом URL, а затем вернуть список, содержащий эти объекты классов.
Мои рекомендации будут:
- Используйте класс
java.util.jar.JarFile
, чтобы прочитать все записи в вашем банке.
- Итерируйте записи, и если данная запись принадлежит классу (ее имя оканчивается на ".class"), вы загружаете класс и добавляете его в список загруженных классов.
Примерно так:
JarFile jar = new JarFile(jarFile);
for(JarEntry entry: Collections.list(jar.entries())){
if(entry.getName().endsWith(".class")){
String className = entry.getName().replace("/", ".").replace(".class","");
foundClasses.add(loader.loadClass(className));
}
}
Для целей загрузки вы можете использовать java.net.URLClassLoader
, содержащий ваш файл jar.
Примерно так
File jarFile = new File("./jedis.jar");
URLClassLoader loader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()});
В результате вы получите все загруженные классы в списке foundClasses
.
С другой стороны, если вы точно знаете классы, которые вы хотите загрузить, тогда URLClassLoader должно быть достаточно для решения проблемы.
File jarFile = new File("./jedis.jar");
URLClassLoader loader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()});
foundClasses.add(loader.loadClass("jedi.academy.ObiWan"));
foundClasses.add(loader.loadClass("jedi.academy.Luke"));
foundClasses.add(loader.loadClass("jedi.academy.Anakin"));
Если вы хотите, чтобы этот загрузчик вторичного класса был независимым от загрузчика системного класса, убедитесь, что для родительского загрузчика класса установлено значение null при создании экземпляра URLClassLoader:
URLClassLoader loader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()}, null);