1

我最近将我的系统从 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 没有自动添加到类路径中?如果这是正常行为,那么它之前是如何工作的?

4

2 回答 2

1

今天我终于弄清楚问题出在哪里:最初安装了 Java 6,然后我直接跳到了 Java 7。

本质上,我在我的主文件夹中的一个文件夹中的 Java 7 上运行 Netbeans 和 Maven。我在操作系统中实际安装了 Java 6,它在我的路径上。显然 Java 6(至少是 Linux 版本)默认包含 tools.jar,它允许 Lombok 正确执行。Java 7 没有。

Maven Exec Plugin 运行时,虽然我在Java 7 下启动了Maven,但它实际上使用了Java 6。当Java 6 被7 替换后,它不再工作,导致此错误。

于 2011-08-11T12:27:57.707 回答
0

java是否链接到正确的版本?

java -version 

type java

问候, 斯蒂芬

于 2011-08-09T17:58:35.260 回答