使用 maven-compiler 和 jdk9-ea+148 编译测试
compile tests using maven-compiler and jdk9-ea+148
我在使用 maven-compile-plugin:3.6.0 at jdk9-ea+148 构建我的应用程序时遇到问题。
我正在尝试制作 jdk9 模块。 Module-info 和其他 类 的编译没有问题,但是当涉及到 default-testCompile 时它就崩溃了。当我的模块-info.java 被移除时,它编译没有问题。
基本上这是我得到的异常:
无法在项目栏上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.6.0:testCompile (default-testCompile):执行 default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.6。 0:测试编译失败。 NullPointerException -> [帮助 1]
org.apache.maven.lifecycle.LifecycleExecutionException: 无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.6.0:testCompile (default-testCompile) on project bar: Execution default-testCompile of goal org.apache.maven.plugins:maven-编译器插件:3.6.0:测试编译失败。
在 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:128)
在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
在 org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.base/java.lang.reflect.Method.invoke(Method.java:538)
在 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.PluginExecutionException:目标 org.apache.maven.plugins:maven-compiler-plugin:3.6.0:testCompile 的执行 default-testCompile 失败。
在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 还有 20 个
原因:java.lang.NullPointerException
在 org.apache.maven.plugin.compiler.AsmModuleInfoParser.getModuleName(AsmModuleInfoParser.java:48)
在 org.apache.maven.plugin.compiler.TestCompilerMojo.preparePaths(TestCompilerMojo.java:259)
在 org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:742)
在 org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:164)
在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 还有 21 个
这是我那里的maven-compiler-plugin的设置
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.9</source>
<target>1.9</target>
<compilerArgument>-Xlint:all</compilerArgument>
</configuration>
</plugin>
</plugins>
有谁知道如何解决这个问题才能使其正常工作?
Maven 尝试读取 module-info.class
s class 名称时发生异常,因为 a recent change was specified to be null. It looks like Maven uses ASM and according to Remi Forax ASM6 should already handle that case.
我建议在 Maven 问题跟踪器中查找问题,如果找不到则打开一个。
我在 jdk9-ea+149 的 maven-compile-plugin:3.6.0 遇到了同样的问题。
我注意到真正的根本原因是 test
目录没有 module-info.java
文件(我只在 src
目录中添加了一个文件)。一旦我添加了一个模块信息文件,问题就消失了。
也就是说,我不知道关于单元测试应该如何布置拼图 directory/module 结构 - 如果测试在单独的模块中,它们只能访问 public (导出)API.
使用 maven-compiler-plugin:3.7.0
的更新版本将帮助您解决此问题:-
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>9</source>
<target>9</target>
<compilerArgument>-Xlint:all</compilerArgument>
</configuration>
</plugin>
</plugins>
我在使用 maven-compile-plugin:3.6.0 at jdk9-ea+148 构建我的应用程序时遇到问题。
我正在尝试制作 jdk9 模块。 Module-info 和其他 类 的编译没有问题,但是当涉及到 default-testCompile 时它就崩溃了。当我的模块-info.java 被移除时,它编译没有问题。
基本上这是我得到的异常:
无法在项目栏上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.6.0:testCompile (default-testCompile):执行 default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.6。 0:测试编译失败。 NullPointerException -> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException: 无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.6.0:testCompile (default-testCompile) on project bar: Execution default-testCompile of goal org.apache.maven.plugins:maven-编译器插件:3.6.0:测试编译失败。 在 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:128) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:863) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:199) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:538) 在 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.PluginExecutionException:目标 org.apache.maven.plugins:maven-compiler-plugin:3.6.0:testCompile 的执行 default-testCompile 失败。 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207) ... 还有 20 个 原因:java.lang.NullPointerException 在 org.apache.maven.plugin.compiler.AsmModuleInfoParser.getModuleName(AsmModuleInfoParser.java:48) 在 org.apache.maven.plugin.compiler.TestCompilerMojo.preparePaths(TestCompilerMojo.java:259) 在 org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:742) 在 org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:164) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) ... 还有 21 个
这是我那里的maven-compiler-plugin的设置
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.9</source>
<target>1.9</target>
<compilerArgument>-Xlint:all</compilerArgument>
</configuration>
</plugin>
</plugins>
有谁知道如何解决这个问题才能使其正常工作?
Maven 尝试读取 module-info.class
s class 名称时发生异常,因为 a recent change was specified to be null. It looks like Maven uses ASM and according to Remi Forax ASM6 should already handle that case.
我建议在 Maven 问题跟踪器中查找问题,如果找不到则打开一个。
我在 jdk9-ea+149 的 maven-compile-plugin:3.6.0 遇到了同样的问题。
我注意到真正的根本原因是 test
目录没有 module-info.java
文件(我只在 src
目录中添加了一个文件)。一旦我添加了一个模块信息文件,问题就消失了。
也就是说,我不知道关于单元测试应该如何布置拼图 directory/module 结构 - 如果测试在单独的模块中,它们只能访问 public (导出)API.
使用 maven-compiler-plugin:3.7.0
的更新版本将帮助您解决此问题:-
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>9</source>
<target>9</target>
<compilerArgument>-Xlint:all</compilerArgument>
</configuration>
</plugin>
</plugins>