Я недавно переформатировал свою систему с Fedora 15 32 до Fedora 15 64-bit. Я установил 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, чтобы сделать некоторый исходный код. На старой системе это работало все время без проблем. Теперь его нет.
Что удивительно, так это то, что в старой системе это работало, хотя я использовал Java 6 и более поздние версии Java 7 без необходимости делать что-то особенное. Я также часто удалял Netbeans и его файлы, либо обновляя его до новой версии, либо просто хотел ускорить его снова. Так что нет никаких специальных настроек или флажков, которые я мог бы изменить в любой программе. Даже тогда я не помню, чтобы я делал что-то особенное, чтобы это работало.
Почему я вдруг получаю эту ошибку? Почему tools.jar не добавляется автоматически в путь к классам? И если это нормальное поведение, то как оно работало раньше?