我正在尝试进行Java类加载。我在使用macOS Yosemite上的eclipse(luna)和1.8.0_25。
我正在使用以下代码来实现它。它可以正常工作,直到它到达一个具有未包含在我从中加载类的jar文件或环境中的依赖关系的类。
我对这些类不感兴趣,所以可以安全地忽略它们。因此,我将其放入try / catch并将其记录下来。
但是,当异常发生时,执行被取消。
异常(总结)如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/runtime/internal/AroundClosure
Caused by: java.lang.ClassNotFoundException: org.aspectj.runtime.internal.AroundClosure
它在内部的try/catch块中确切的行上升。
为什么?难道try/catch不应该只记录并继续执行吗?
URLClassLoader ucl = null;
try {
URL url = Utils.getURIFromPath(jarFilePath).toURL();
URL[] urls = new URL[] { url };
ucl = new URLClassLoader(urls);
for (String tmp : classes) {
String clazz = tmp.substring(0, tmp.indexOf(".class")).replaceAll("/", ".");
try {
ucl.loadClass(clazz);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
} catch (MalformedURLException e) {
LOGGER.error(e.getMessage(), e);
} finally {
if (ucl != null) {
try {
ucl.close();
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
}
}