tools.jar不再在classpath上了?

时间:2011-08-09 17:55:39

标签: java lombok

我最近将我的系统从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及其文件,要么升级到新版本,要么只是想再次加速。因此,在任一程序中都没有任何特殊设置或复选框。即便如此,我也不记得做任何特别的事情让它发挥作用。

为什么我突然得到这个错误?为什么too​​ls.jar不会自动添加到类路径中?如果这是正常行为,那么它之前是如何运作的呢?

2 个答案:

答案 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

此致  斯特凡