浏览代码

loadClass 的 catch (Exception e) 改为 catch (Throwable e)

James 5 年之前
父节点
当前提交
b8c068f628
共有 1 个文件被更改,包括 10 次插入4 次删除
  1. 10 4
      src/main/java/com/jfinal/core/PathScanner.java

+ 10 - 4
src/main/java/com/jfinal/core/PathScanner.java

@@ -243,11 +243,17 @@ public class PathScanner {
 	private Class<?> loadClass(String className) {
 		try {
 			return classLoader.loadClass(className);
-		} catch (Exception e) {
+		}
+		// 此处不能 catch Exception,否则抓不到 NoClassDefFoundError,因为它是 Error 的子类
+		catch (Throwable e) {
 			/**
-			 * 由于扫描是一种主动行为,所以 pom.xml 中的 provided 依赖会在此被 loadClass
-			 * 从而抛出 ClassNotFoundException、NoClassDefFoundError 异常
-			 * 对于 provided 依赖 return null 跳过这些 class 不处理
+			 * 由于扫描是一种主动行为,所以 pom.xml 中的 provided 依赖会在此被 loadClass,
+			 * 从而抛出 NoClassDefFoundError、UnsupportedClassVersionError、
+			 * ClassNotFoundException 异常 对于 provided 依赖 return null 跳过这些
+			 * class 不处理
+			 * 
+			 * 如果这些异常并不是 provided 依赖的原因而引发,也会在后续实际用到它们时再次抛出异常,
+			 * 所以 return null 并不会错过这些异常
 			 */
 			return null;
 		}