我最近将我的系统从 Fedora 15 32 重新格式化为 Fedora 15 64 位。我安装了 64 位版本的 Java,启动了一个新的 Netbeans 实例,尝试构建使用 Lombok 项目的项目,并得到了这个:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/parser/Scanner$Factory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at lombok.delombok.DelombokApp$1.loadStreamAsClass(DelombokApp.java:102)
at lombok.delombok.DelombokApp$1.loadClass(DelombokApp.java:117)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at lombok.delombok.Delombok.delombok(Delombok.java:358)
at lombok.delombok.Delombok.main(Delombok.java:190)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at lombok.delombok.DelombokApp.runApp(DelombokApp.java:55)
at lombok.core.Main.go(Main.java:127)
at lombok.core.Main.main(Main.java:41)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.parser.Scanner$Factory
at java.lang.ClassLoader.findClass(ClassLoader.java:522)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at lombok.delombok.DelombokApp$1.loadClass(DelombokApp.java:118)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 15 more
我以前从未收到此错误。这个特殊错误来自 Maven exec 插件试图执行 lombok 以 delombok 一些源代码。在旧系统上,这一直有效,没有问题。现在不是。
令人费解的是,即使我使用了 Java 6 和后来的 Java 7,它在旧系统上也能正常工作,而无需做任何特别的事情。我还经常删除 Netbeans 及其文件,要么升级到新版本,要么只是想再次加快速度。因此,我在这两个程序中都没有更改任何特殊设置或复选框。即使那样,我也不记得做过什么特别的事情来让它工作。
为什么我突然收到这个错误?为什么 tools.jar 没有自动添加到类路径中?如果这是正常行为,那么它之前是如何工作的?