2011-08-09 3 views
1

J'ai récemment reformaté mon système de Fedora 15 32 à Fedora 15 64 bits. J'ai installé la version 64 bits de Java, a commencé une nouvelle instance Netbeans, essayé de construire mon projet qui utilise du projet Lombok, et a obtenu ceci:tools.jar n'est plus sur classpath?

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 

Je n'ai jamais eu cette erreur avant. Cette erreur particulière est venue du plugin exec Maven essayant d'exécuter lombok pour delombok du code source. Sur l'ancien système, cela fonctionnait tout le temps sans problème. Maintenant ce n'est pas. Ce qui est déconcertant, c'est que sur l'ancien système, cela fonctionnait bien que j'utilisais à la fois Java 6 et plus tard Java 7 sans avoir à faire quelque chose de spécial. J'ai aussi souvent supprimé Netbeans et ses fichiers, soit en mettant à jour vers une nouvelle version, soit en voulant simplement l'accélérer à nouveau. Il n'y a donc pas de paramètres spéciaux ou de cases à cocher que je pourrais changer dans les deux programmes. Même alors, je ne me souviens pas de faire quelque chose de spécial pour le faire fonctionner.

Pourquoi est-ce que je reçois tout à coup cette erreur? Pourquoi tools.jar n'est pas automatiquement ajouté au classpath? Et si c'est un comportement normal, comment cela a-t-il fonctionné auparavant?

Répondre

1

Aujourd'hui, j'ai finalement compris ce que la question était: Java 6 a été installé à l'origine et je sautais directement à Java 7.

Essentiellement je courais Netbeans et Maven Java 7 qui était dans un dossier dans mon dossier personnel. J'avais Java 6 installé dans le système d'exploitation et il était sur mon chemin. Apparemment, Java 6 (au moins les versions Linux) inclut tools.jar par défaut, ce qui permet à Lombok de s'exécuter correctement. Java 7 ne le fait pas. Quand le plugin Maven Exec a fonctionné, il utilisait Java 6 même si j'avais démarré Maven sous Java 7. Lorsque Java 6 a été remplacé par 7, cela ne fonctionnait plus, provoquant cette erreur.

+0

Java est plus modulaire maintenant. Dans une certaine mesure, c'est une caractéristique liée à votre problème: http://www.infoworld.com/d/developer-world/java-get-more-modular-jdk-7-upgrade-919 – Snicolas

+0

Puis-je dire que ma réponse était pas si gros loin @TheLQ? – Snicolas

0

est-ce que java a un lien vers la bonne version?

java -version 

type java 

Cordialement, Stéphane

+0

Oui c'est la bonne version. Netbeans utilise java dans '/ usr/java/default /' qui est symlinked à jdk1.7.0. Le java bianary est également lié à la bonne version. Tout est correct – TheLQ

+0

Êtes-vous sûr qu'il est lié à jdk pas jre? – Snicolas

+0

Oui, javac se trouve dans/usr/java/default/bin/javac. Le JRE est dans un dossier – TheLQ