在执行Java Maven Jacoco测试时出现错误:无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test。

10

在执行Java Maven Jacoco测试时出现错误:无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

早上好。我正在进行一个Maven项目,使用NetBeans编写Java代码。当我尝试运行一个测试文件时,我会遇到这个错误:

cd C:\Users\ruimi\Documents\NetBeansProjects\erro_testes_unitarios; "JAVA_HOME=C:\\Program Files\\Java\\jdk-14" cmd /c "\"C:\\Program Files\\netbeans 11.3 tenativa 1000\\NetBeans-11.3\\netbeans\\java\\maven\\bin\\mvn.cmd\" -Dtest=com.mycompany.erro_testes_unitarios.NewMainTest -Dmaven.ext.class.path=\"C:\\Program Files\\netbeans 11.3 tenativa 1000\\NetBeans-11.3\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 test-compile surefire:test"
Scanning for projects...

------------------------------------------------------------------------
Building erro_testes_unitarios 1.0-SNAPSHOT
------------------------------------------------------------------------

--- jacoco-maven-plugin:0.7.7.201606060606:prepare-agent (default) @ erro_testes_unitarios ---
argLine set to -javaagent:C:\\Users\\ruimi\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.7.7.201606060606\\org.jacoco.agent-0.7.7.201606060606-runtime.jar=destfile=C:\\Users\\ruimi\\Documents\\NetBeansProjects\\erro_testes_unitarios\\target\\jacoco.exec

--- maven-resources-plugin:2.6:resources (default-resources) @ erro_testes_unitarios ---
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory C:\Users\ruimi\Documents\NetBeansProjects\erro_testes_unitarios\src\main\resources

--- maven-compiler-plugin:3.1:compile (default-compile) @ erro_testes_unitarios ---
Nothing to compile - all classes are up to date

--- maven-resources-plugin:2.6:testResources (default-testResources) @ erro_testes_unitarios ---
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory C:\Users\ruimi\Documents\NetBeansProjects\erro_testes_unitarios\src\test\resources

--- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ erro_testes_unitarios ---
Nothing to compile - all classes are up to date

--- maven-surefire-plugin:2.12.4:test (default-cli) @ erro_testes_unitarios ---
Surefire report directory: C:\Users\ruimi\Documents\NetBeansProjects\erro_testes_unitarios\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:513)
    at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:525)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
    at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:140)
    at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:101)
    at org.jacoco.agent.rt.internal_6da5971.PreMain.createRuntime(PreMain.java:55)
    at org.jacoco.agent.rt.internal_6da5971.PreMain.premain(PreMain.java:47)
    ... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
    at java.base/java.lang.Class.getField(Class.java:2013)
    at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
    ... 9 more
*** java.lang.instrument ASSERTION FAILED ***: "result" with message agent load/premain call failed at JPLISAgent.c line: 422
FATAL ERROR in native method: processing of -javaagent failed, processJavaStart failed

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------

Total time: 2.899 s
Finished at: 2020-04-10T13:14:06+01:00
Final Memory: 11M/47M

------------------------------------------------------------------------

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-cli) on project erro_testes_unitarios: Execution default-cli of goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ? -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

以下是我的pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>erro_testes_unitarios</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>14</maven.compiler.source>
        <maven.compiler.target>14</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId> 
                <artifactId>jacoco-maven-plugin</artifactId> 
                <version>0.7.7.201606060606</version> 
                <executions>
                    <execution> 
                        <goals>
                            <goal>prepare-agent</goal> 
                        </goals>
                    </execution> 
                    <execution>
                        <id>report</id> 
                        <phase>prepare-package</phase> 
                        <goals>
                            <goal>report</goal> 
                        </goals>
                    </execution> 
                </executions>
            </plugin> 

        </plugins>
    </build>
</project>

你能帮我解决这个问题吗? 感谢大家的配合!


升级maven-surefire-plugin到最新版本,并将您正在使用的所有插件升级到最新版本。我还建议将jacoco升级到最新版本(0.8.5?)...同时,首先从纯命令行运行您的构建... - khmarbaise
1个回答

14

显然,您正在使用JDK 14作为开发和测试环境。您可以检查它。转到帮助->关于->Java。内置的Maven和Maven中的所有插件都使用NetBeans作为执行环境所使用的JDK版本。

Jacoco仅在0.8.5版本中添加了对JDK 14的实验支持版本:

  • JaCoCo现已正式支持Java 13
  • 实验性支持Java 14类文件(GitHub #897)。
  • Kotlin编译器添加的用于默认参数的open函数的分支在生成报告期间被过滤掉(GitHub #887)。

您可以将插件版本更改为0.8.5:

...
<groupId>org.jacoco</groupId> 
  <artifactId>jacoco-maven-plugin</artifactId> 
<version>0.8.5</version>
... 

0.7.7 版本支持JDK 8或更早版本。因此,如果你想使用插件的0.7.7版本,可以使用JDK 8。如需设置NetBeans的JDK版本,请参见该问题。同时,在使用JDK 8时,应将maven.compiler.source和maven.compiler.target更改为1.8。


嗨@RuiRibeiro,如果您认为答案有用并帮助您解决了问题,请接受答案。 - Dmitry.M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接