Ich habe eine benutzerdefinierte Annotation und einen Prozessor geschrieben, der com.sun.source.util.TaskListener
implementiert. Die Anmerkung Verarbeitung arbeitet zur Zeit, wenn sie als Teil eines gradle Build lief, aber wenn ich Annotation Verarbeitung in STS ermöglichen, bekomme ich folgende Fehlermeldung:STS/Eclipse-Fehler: Beim Aufrufen von Code vom Plug-in sind Probleme aufgetreten: "org.eclipse.core.resources"
Problems occurred when invoking code from plug-in: "org.eclipse.core.resources"
java.lang.NoClassDefFoundError: com/sun/source/util/TaskListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.eclipse.jdt.apt.core.internal.AnnotationProcessorFactoryLoader.loadJava6FactoryClasses(AnnotationProcessorFactoryLoader.java:638)
at org.eclipse.jdt.apt.core.internal.AnnotationProcessorFactoryLoader.loadFactories(AnnotationProcessorFactoryLoader.java:577)
at org.eclipse.jdt.apt.core.internal.AnnotationProcessorFactoryLoader.getJava6FactoriesAndAttributesForProject(AnnotationProcessorFactoryLoader.java:455)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:131)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:968)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:489)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:397)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:184)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:334)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:63)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:256)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:180)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: java.lang.ClassNotFoundException: com.sun.source.util.TaskListener
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 35 more
ich ein paar Dinge ausprobiert habe, um zu versuchen, dies zu beheben:
- ich habe die installierte JRE geändert für eine installierte JDK verweist
- ich in eclipse
- I tools.jar als externe jar versucht, indem tools.jar als externe jar in der JRE Definition hinzugefügt das Projekt, auf dem Annotationsverarbeitung wurde aktiviert.
- Ich habe auch versucht tools.jar als Variable CLASSPATH
Es ist sicherlich eine Option, obwohl ich gehofft hatte in der Lage zu sein, in der Lage zu sein, den my Annotation Prozessor mit dem inkrementellen Eclipse-Compiler zu verwenden. –
Ich denke, das Checker-Framework muss das gleiche Problem haben, weshalb sie wahrscheinlich ein Eclipse-Plugin haben. Projekt Lombok behandelt Eclipse-spezifisches Verhalten durch irgendeine Art von ClassLoader-Magie. (Nochmal: Ich spekuliere, ich bin kein Experte. Ich denke nur über alternative Wege nach, dies zu lösen. Das Beste wäre natürlich, wenn diese internen APIs zu einem offiziellen Teil der Java-Spezifikation gemacht würden). – Hervian