private static Class IMPL;
static ...{
try ...{
String name =
System.getProperty("org.apache.lucene.SegmentReader.class",
SegmentReader.class.getName());
IMPL = Class.forName(name);
} catch (ClassNotFoundException e) ...{
throw new RuntimeException("cannot load SegmentReader class: " + e, e);
} catch (SecurityException se) ...{
try ...{
IMPL = Class.forName(SegmentReader.class.getName());
} catch (ClassNotFoundException e) ...{
throw new RuntimeException("cannot load default SegmentReader class: " + e, e);
}
}
}
看到这句没有“System.getProperty("org.apache.lucene.SegmentReader.class", SegmentReader.class.getName());”,鬼知道它什么时候把这个系统属性设入内存中的!它的本意是想动态加载SegmentReader,但反而有可能弄巧成拙,导致Class.forName报出NoClassDefFoundError,更要命的是在static{}代码段中的Error不会明确的显示在异常堆栈中,任你用什么debug手段都不能立即定位问题。