如何解决java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl 在 Eclipse 中使用注解处理器
我编写了一个自定义的 Annotation Processor
:
public class MyProcessor extends AbstractProcessor {
BaseProcessingEnvImpl env;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
String className = processingEnv.getClass().getName();
processingEnv.getMessager().printMessage(WARNING,"class name is: " + className);
if ("org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl".equals(className) ||
"org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeBuildProcessingEnvImpl".equals(className)){
// Trying to convert ProcessingEnvironment to BaseProcessingEnvImpl
env = (BaseProcessingEnvImpl) processingEnv;
}
super.init(processingEnv);
}
public boolean process(Set<? extends TypeElement> annotations,RoundEnvironment roundEnv) {
return false;
}
}
- 我打包到
test.jar
, - 我将
test.jar
添加到 Eclipse 项目。 - 我将
test.jar
添加到 Java 编译器 - 注释处理 - 工厂路径 - 构建项目,但它抛出异常:
java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl
at test.MyProcessor.init(MyProcessor.java:29)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.discoverNextProcessor(IdeAnnotationProcessorManager.java:97)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:119)
at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:171)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:138)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:950)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:450)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:426)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:377)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:214)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:309)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:272)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:187)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:846)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:229)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:277)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:330)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:333)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:292)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:481)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:565)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)
at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:603)
at org.eclipse.core.internal.resources.Project.build(Project.java:116)
at org.eclipse.jdt.internal.ui.util.CoreUtility$BuildJob.run(CoreUtility.java:157)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
我知道 Eclipse 使用 ecj
编译器,那么为什么它没有加载类 BaseProcessingEnvImpl
?我也尝试转换为 IdeBuildProcessingEnvImpl
,但得到同样的错误。
错误日志:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。