2017-09-20 76 views
2

我正在尝试编写注释处理器,但似乎init方法总是通过空值ProcessingEnvironment。我对注释处理器没有经验,但这似乎是不正确的行为。以下是代码:注释处理器在初始化中抛出NullPointerException异常

@SupportedSourceVersion(SourceVersion.RELEASE_8) 
@SupportedAnnotationTypes("*") 
public class DocAnnotationProcessor extends AbstractProcessor { 

    @Override 
    public synchronized void init(ProcessingEnvironment processingEnvironment) { 
     super.init(processingEnvironment); 
    } 

    @Override 
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
     processingEnv.getMessager().printMessage(javax.tools.Diagnostic.Kind.WARNING,"IT WORKS"); 
     return true; 
    } 
} 

而且堆栈跟踪:

[ERROR] Failed to execute goal org.bsc.maven:maven-processor-plugin:3.3.2:process (process) on project flowBot: Error executing: java.lang.NullPointerException -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.bsc.maven:maven-processor-plugin:3.3.2:process (process) on project flowBot: Error executing 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47) 
Caused by: org.apache.maven.plugin.MojoExecutionException: Error executing 
    at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.execute(AbstractAnnotationProcessorMojo.java:429) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207) 
    ... 21 more 
Caused by: java.lang.RuntimeException: java.lang.NullPointerException 
    at com.sun.tools.javac.main.Main.compile(Main.java:553) 
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129) 
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138) 
    at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.executeWithExceptionsHandled(AbstractAnnotationProcessorMojo.java:766) 
    at org.bsc.maven.plugin.processor.AbstractAnnotationProcessorMojo.execute(AbstractAnnotationProcessorMojo.java:421) 
    ... 23 more 
Caused by: java.lang.NullPointerException 
    at util.flowAnnotations.DocAnnotationProcessor.init(DocAnnotationProcessor.java:17) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:500) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:690) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176) 
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170) 
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856) 
    at com.sun.tools.javac.main.Main.compile(Main.java:523) 
    ... 27 more 

在我看来,这应该是最低的工作注释处理器。出了什么问题?

+0

您正在使用哪个版本的JDK? – Devstr

+0

另外,你可以在Github上发布你的项目吗? – Devstr

+1

当你看到这个异常时,DocAnnotationProcessor.java:17上的代码是什么? – Devstr

回答

0

研究一些位添加到这个线程:

一个likely bug与源和目标-1.8根据跟踪器固定在3.3.1释放。在编译你提供的源代码时出现故障时,插件会在处理过程中抛出MojoExecutionException


plugin repository一个搜索的util.flowAnnotations.DocAnnotationProcessor不能导致我任何结果,然后我读了comment by you其中规定,您所使用的/混合和处理Scala类。对此,您可以使用您的CustomProcessor,这可能是一个类似的实现,覆盖BaseAbstractProcessor类,然后处理scala代码,因为AnnotationProcessorCompiler目前为java所做的。

这将是很好的了解,有已经存在像retronym/annotation-processor栈,做同样的今天可见在他们的sample processor.


论矛盾纸条this comment,我能找到的插件制作有些进度需要compatible with Java9.

相关问题