Maven编译器插件空指针

szu*_*umi 17 java maven

我在通过终端运行测试时遇到问题。我需要运行 mvn install,但我得到:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project ProjectName: Fatal error compiling: CompilerException: NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project ProjectName: Fatal error compiling
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:290)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:194)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:564)
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)
Run Code Online (Sandbox Code Playgroud)

我试图用不同版本的编译器运行它。在 Eclipse 中通过 testNG 运行测试时一切正常。通过终端运行时出现问题。这些是移动应用程序的黄瓜测试。Runner 使用 Appium。

roj*_*roj 16

Fatal error compiling: CompilerException: NullPointerException在 JDK 11 下运行 maven 3.3.9 编译时我也遇到了问题。我切换到 JDK 8 并且不再获得NullPointerException.


Lar*_*ari 12

Maven 编译器插件中有一个未解决的问题,https://issues.apache.org/jira/browse/MCOMPILER-346

根本问题通常是由被掩盖的编译器错误引起的。要找出编译器错误,请传递-Dmaven.compiler.forceJavacCompilerUse=truemvn命令行。修复编译器错误后,问题就消失了。

  • 这对我有用。添加然后能够查看/修复编译错误。无论如何,编译插件不应该抛出NPE (2认同)

Rus*_*pez 9

当 Maven 编译器插件找不到源代码的某些必需部分时,就会发生这种情况。

我来说说我的案例吧:

  1. 我创建了一个 Spring Boot 应用程序并想测试它
  2. 所以我创建了另一个 Maven 模块来创建用于自动化 GUI 测试的 API
  3. 会覆盖创建 jar 的方式,因此 .jar 内的目录会发生变化,因此我必须调整来为我生成 jar
  4. 我忘记在这个插件中包含一个包(服务),所以你出现了同样的错误

所以......我包含了这个包并且它起作用了

     <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>inventarios.Inventarios</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <!--to be imported on other projects-->
                        <classifier>app-to-import</classifier>
                        <includes>
                            <include>**/desktop/*</include>
                            <include>**/desktop/navigation/*</include>
                            <include>**/service/*</include> <!--the package I forgot-->
                            <include>**/util/*</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

我在 JDK 类中搜索 bug 时发现的另一个建议是在编译器插件上添加配置选项forceJavacCompilerUse

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>3.8.1</version>
   <configuration>
      <forceJavacCompilerUse>true</forceJavacCompilerUse>
   </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)