Google 容易出错的 java 编译器 - maven 构建期间的错误:java.lang.NoSuchFieldError: pid

Posted

技术标签:

【中文标题】Google 容易出错的 java 编译器 - maven 构建期间的错误:java.lang.NoSuchFieldError: pid【英文标题】:Google errorprone java compiler - Bugs during maven build: java.lang.NoSuchFieldError: pid 【发布时间】:2015-09-11 17:50:26 【问题描述】:

我在 pom 文件中添加了以下内容:

<!-- Source: http://errorprone.info/docs/installation -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <compilerId>javac-with-errorprone</compilerId>
                <forceJavacCompilerUse>true</forceJavacCompilerUse>
                <!-- maven-compiler-plugin defaults to targeting Java 5, but our javac
                     only supports >=6 -->
                <source>8</source>
                <target>8</target>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.plexus</groupId>
                    <artifactId>plexus-compiler-javac-errorprone</artifactId>
                    <version>2.5</version>
                </dependency>
                <!-- override plexus-compiler-javac-errorprone's dependency on
                     Error Prone with the latest version -->
                <dependency>
                    <groupId>com.google.errorprone</groupId>
                    <artifactId>error_prone_core</artifactId>
                    <version>2.0.4</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

在 Maven 全新安装期间会导致:

An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.NoSuchFieldError: pid
    at lombok.javac.JavacAST.packageDeclaration(JavacAST.java:107)
    at lombok.javac.JavacAST.<init>(JavacAST.java:81)
    at lombok.javac.JavacTransformer.transform(JavacTransformer.java:67)
    at lombok.javac.apt.Processor.process(Processor.java:250)
    at lombok.core.AnnotationProcessor$JavacDescriptor.process(AnnotationProcessor.java:115)
    at lombok.core.AnnotationProcessor.process(AnnotationProcessor.java:165)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:801)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:713)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2000(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1021)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1129)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1141)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:833)
    at com.sun.tools.javac.main.Main.compile(Main.java:249)
    at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:220)
    at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:158)
    at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:87)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:219)
    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:497)
    at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:825)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    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:120)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    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:497)
    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)
[DEBUG] incrementalBuildHelper#afterRebuildExecution
[INFO] ------------------------------------------------------------------------

...

[ERROR] 未能执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.3:compile 项目核心上的(默认编译):编译失败-> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException: 失败 执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.3:compile 项目核心上的(默认编译):编译失败 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:582) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:158) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 造成的: org.apache.maven.plugin.compiler.CompilationFailureException: 编译失败 org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:915) 在 org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 还有 19 个 [错误]

嗯.. 我刚才注意到它正在抱怨与 lombok 相关的 AST 内容。

容易出错和lombok不能很好地协同工作吗?

我可以做些什么来解决这个问题?

【问题讨论】:

【参考方案1】:

由于编译器的原因,它们确实不能很好地协同工作。

Error-prone dev comments (Jun, 26, 2015):

我们决定将 Error Prone 固定到 javac 的特定版本,因为 Error Prone 依赖于编译器内部,并且支持多个 javac 版本是困难且难以验证的,因为我们在内部只使用一个 javac 版本。

Lombok dev comment (Oct, 12, 2015):

恐怕 Java 9 支持不会在几天内得到修复。

看起来从 2.0 开始的所有 errorprone 版本都使用 javac9,因此无法解决,尽管您可以尝试以前版本的 errorprone。

【讨论】:

新访客更新 (2017)。 Lombok 现在支持javac9。如果您现在遇到此问题,则有其他原因。 @momomo 现在还有其他问题,有时会使其无法正常工作,但这个答案不再是问题。【参考方案2】:

我也遇到了同样的问题,用Java 8编译解决了(原来我的JAVA_HOME指向的是Java 9版本)。

【讨论】:

这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review 感谢您的反馈@smttsp。我知道这并不完全是一个答案,但我仍然想分享我的经验,以防它对某人有所帮助。理想情况下,我的“答案”应该是评论。唉,我没有足够的声誉来评论不属于我的答案。 @AhmadShahwan 谢谢,也许现在我可以重试了。你用过龙目岛吗? 随时@momomo,希望对您有所帮助。是的,我使用的是 lombok,更准确地说,我正在编译这个 wildfly swarm example。

以上是关于Google 容易出错的 java 编译器 - maven 构建期间的错误:java.lang.NoSuchFieldError: pid的主要内容,如果未能解决你的问题,请参考以下文章

在 Go 中编译 google-fhir 原型文件时出错

使用 google toolbox for mac 编译单元测试时出错

全网首发:TeaVM编译时容易出错的几种代码

Java基础中容易出错的内容笔记

java中的jdbc容易出错的地方(谨记)

怎么又出错了?盘点java中最容易出现的错误。