從JDK6移動到JDK7之後,接下來的代碼將失敗,ClassNotFoundException的CompilationTask.call()引入了ClassNotFoundException。曾在JDK6,而不是在JDK7
CompilationTask task = cSysCompiler.getTask(null, cFileManager, cDiagnosticCollector, null, null, cUnitsToCompile);
boolean mSuccess = task.call();
Analyzer mAnalyzer = new Analyzer(); // Throws ClassNotFoundException
解決方法:
ClassLoader mSystemClassLoader = ClassLoader.getSystemClassLoader();
mSystemClassLoader.loadClass("ft.jopc.com.JavaBytecodeObject");
mSystemClassLoader.loadClass("ft.jopc.com.analyzer.Analyzer");
mSystemClassLoader.loadClass("ft.jopc.opccl.ClassLoaderListener");
…
ompilationTask task = cSysCompiler.getTask(null, cFileManager, cDiagnosticCollector, null, null, cUnitsToCompile);
boolean mSuccess = task.call();
Analyzer mAnalyzer = new Analyzer(); // No ClassNotFoundException
有誰知道爲什麼在調用後task.call()類無法找到?它看起來像編譯任務以某種方式改變了systemclassloader?
你居然*編譯*您正在使用*在同一類*類?如果是這樣,那麼Java 7中的某些緩存行爲可能會發生變化,導致問題發生,並且它*不應該首先發揮作用。 –
@Joachim classNotFoundException發生在編譯之前已經存在於類路徑中的類 – Houtman