2017-09-20 80 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.

相關問題