我最近将我的系统从Fedora 15 32重新格式化为64位Fedora 15。我安装了64位版本的Java,启动了一个新的Netbeans实例,试图构建我使用Project 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不会自动添加到类路径中?如果这是正常行为,那么它之前是如何运作的呢?
答案 0 :(得分:1)
今天我终于弄清楚问题是什么:最初安装了Java 6,我直接跳到Java 7。
基本上我在Java 7上运行Netbeans和Maven,它位于我的主文件夹中的一个文件夹中。我实际上已经在操作系统中安装了Java 6,它就在我的路上。显然,Java 6(至少是Linux版本)默认包含tools.jar,它允许Lombok正确执行。 Java 7没有。
当Maven Exec插件运行时,它实际上使用了Java 6,即使我在Java 7下启动了Maven。当Java 6被7替换时,它不再起作用,导致此错误。
答案 1 :(得分:0)
java链接到正确的版本吗?
java -version
type java
此致 斯特凡