jacoco-maven-plugin 和 maven-surefire-plugin 之间的冲突

问题描述

我在使用 jacoco-maven-pluginmaven-surefire-plugin 时遇到问题:似乎没有完成覆盖率分析!!!

为了向您提供更多信息,我使用了 jacoco-maven-plugin 并且它运行良好。但是,我在运行测试时发现了一个性能问题,并在此处找到了解决方案:https://github.com/nats-io/nats-streaming-server/issues/698

我将以下部分添加到我的 maven 的 pom.xml 中:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <!--
                    Option used to speedup NATS tests (cf. https://github.com/nats-io/nats-streaming-server/issues/698)
                -->
                <configuration>
                    <argLine>-Djava.security.egd=file:/dev/./urandom</argLine>
                </configuration>
            </plugin>

我的性能问题已解决,但我意识到不再进行覆盖分析!!! (当然,我试图恢复我的更改:这个缺陷消失了)

the following page 上,我看到这个缺陷已经得到处理,但是提出的解决方案(从子模块 pom 中移动“maven-surefire-plugin,并且只将它放在父 pom 的构建部分”)确实不适合我

我做了额外的测试。在我的测试运行时,我尝试检查 maven 运行的命令行

这是我获得的:

仅指定 jacoco-maven-plugin 时:

$ ps aux | grep 'urandom\|jacoco'

pmesmeur 1477900 0.0 0.5 9181248 132192 pts/25 Sl+ 21:58 0:02 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -javaagent:/home/25 Sl+ repository/org/jacoco/org.jacoco.agent/0.8.5/org.jacoco.agent-0.8.5-runtime.jar =destfile=/media/cersei/ssd/data/home/pmesmeur/Devel/Misys/Projects/SFX/SandBoxes/test.coverage.while.removing.maven.surefire.plugin/RemoteLpConnector/clientlib/lpconnector_integration/target/jacoco.exec,append=true -jar /media/cersei/ssd/data/home/pmesmeur/Devel/Misys/Projects/SFX/SandBoxes/test.coverage.while.removing.maven.surefire.plugin /RemoteLpConnector/clientlib/lpconnector_integration/target/surefire/surefirebooter2551385423703193145.jar /media/cersei/ssd/data/home/pmesmeur/Devel/Misys/Projects/SFX/SandBoxes/test.coverage.while.removing.removing. /RemoteLpConnector/clientlib/lpconnector_integration/target/surefire 2021-06-30T21-58-25_026-jvmrun1 surefire7433391136694530406tmp su refire_06093582606115842162tmp

当同时指定了 jacoco-maven-pluginmaven-surefire-plugin 时:

$ ps aux | grep 'urandom\|jacoco'

pmesmeur 1478702 0.0 0.0 2632 772 pts/25 S+ 22:03 0:00 /bin/sh -c cd /media/cersei/ssd/data/home/pmesmeur/Devel/Misys/Projects/SFX/SandBoxes/test .coverage.while.removing.maven.surefire.plugin/RemoteLpConnector/clientlib/lpconnector_integration && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.security.egd=file:/dev /./urandom -jar /media/cersei/ssd/data/home/pmesmeur/Devel/Misys/Projects/SFX/SandBoxes/test.coverage.while.removing.maven.surefire.plugin/ RemoteLpConnector/clientlib/lpconnector_integration/target/surefire/surefirebooter4018295361004976187.jar /media/cersei/ssd/data/home/pmesmeur/Devel/Misys/Projects/SFX/SandBoxes/test.coverage.while.removing.maven.m RemoteLpConnector/clientlib/lpconnector_integration/target/surefire 2021-06-30T22-03-23_413-jvmrun1 surefire4924791797502979280tmp surefire_0799861275955488820>58t

我现在完全确定启用 maven-surefire-plugin 时不会启动 jacoco

如果有人可以帮助我,我将不胜感激

最好的问候 菲利普

解决方法

我尝试通过 maven 命令行提供 argLine

 -DargLine="-Djava.security.egd=file:/dev/./urandom"

但我遇到了同样的问题

我在以下页面找到了解决问题的方法https://www.eclemma.org/jacoco/trunk/doc/prepare-agent-mojo.html

  1. 定义一个 <property>
    <argLine>-Djava.security.egd=file:/dev/./urandom</argLine>
    
  2. <configuration> 中定义一个空的 maven-surefire-plugin
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <!-- no argLine here -->
        </configuration>
    </plugin>