考虑以下简单方法,即(试图)装入特定名称的所有类别,存放在位于指定路径(即:)的JAR文件内。
public static List<Class<?>> getAllClasses(String name, String path)
{
File file = new File(path);
try
{
URL url = file.toURI().toURL();
URLClassLoader loader = URLClassLoader.newInstance(new URL[] {url});
JarFile jar = new JarFile(file);
Enumeration<JarEntry> entries = jar.entries();
Class<?> type;
String elementName;
List<Class<?>> classList = new ArrayList<Class<?>>();
while (entries.hasMoreElements())
{
elementName = entries.nextElement().getName();
if (elementName.equals(name))
{
try
{
type = loader.loadClass(elementName);
classList.add(type);
}
catch (Exception e)
{
}
}
}
return classList;
}
catch (Exception e)
{
}
return null;
}
如果路径中有超过1个 JARs, 每一个都至少有1个类别, 名称相同, 带有已经装入的类, 例如 org. whatever. myClass
, 是否有办法, 没有定制的分类装载器, 可以装入全部 org. whatever. MyClass
类?