【问题标题】:Jacoco report 0 classesJacoco 报告 0 类
【发布时间】:2019-01-15 13:26:05
【问题描述】:

我是 mvn & jacoco 的新手,我遇到了 mvn jacoco:report 的问题,他在 jacoco.exec 文件中找到了 0 个类

jacoco 代理在 docker 容器内执行:-javaagent:/opt/jboss/jacoco/org.jacoco.agent.jar=destfile=/opt/jboss/jacoco/jacoco.exec,output=tcpserver,address=*,port=6667

我在standalone.conf中通过了选项

#
# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true"
   JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
   JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/jboss/jacoco/org.jacoco.agent.jar=destfile=/opt/jboss/jacoco/jacoco.exec,output=tcpserver,address=*,port=6667"
else
   echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi

够了吗?

当我启动 jacoco:dump 时,我成功连接到我的容器并在本地创建了一个 jacoco.exec 文件(非空)

我的应用是这样的:

  • Docker 容器:wildfly(我需要代码覆盖的地方)
  • 本地机器:我的 maven 应用程序
  • 本地机器:我的 selenium maven 项目(我在其中执行 jacoco)

我的插件配置 pom:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.2</version>
    <configuration>
            <dataFile>/home/mypath/jacoco.exec</dataFile>
            <reset>true</reset>
            <address>172.17.0.3</address>
            <port>6667</port>
            <append>false</append>
    </configuration>
</plugin>

编辑:jacococli 生成报告,所以我的 exec 文件是正确的

编辑:好的,所以我想我发现我的问题是我的 maven 应用程序是我的 selenium 项目的依赖项,似乎 jacoco-maven-plugin 无法使用依赖项(获取所有类文件)来创建报告,但使用 ant 有更多选项,所以这是我的解决方案:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <phase>test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target name="report">
                                <!-- Execute an ant task within maven -->
                                <echo message="Generating JaCoCo Reports" />
                                <taskdef name="report"
                                    classname="org.jacoco.ant.ReportTask">
                                    <classpath
                                        path="xxxtarget/*.jar" />
                                </taskdef>
                                <mkdir dir="${basedir}/target/coverage-report" />
                                <report>
                                    <executiondata>
                                        <fileset dir="${basedir}/target">
                                            <include name="jacoco.exec" />
                                        </fileset>
                                    </executiondata>
                                    <structure name="Integration Tests Coverage Report">
                                        <classfiles>
                                            <fileset dir="xxx/target" >
                                                <include name="*.jar"/>
                                            </fileset>
                                        </classfiles>                                   
                                    </structure>
                                    <html destdir="${basedir}/target/coverage-report/html" />
                                </report>
                            </target>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.jacoco</groupId>
                        <artifactId>org.jacoco.ant</artifactId>
                        <version>0.8.2</version>
                    </dependency>
                </dependencies>
            </plugin>

我终于有了 pom 自动生成的报告

谢谢

【问题讨论】:

    标签: java maven docker jacoco-maven-plugin


    【解决方案1】:

    你是如何执行 jacoco 报告目标的?

    您可以尝试像这样运行命令:

    mvn -B -DskipTests org.jacoco:jacoco-maven-plugin:0.7.9:report -Djacoco.dataFile="<..>\target\jacoco-merged.exec"
    

    【讨论】:

    • 我添加了我的 pom 插件配置,我只是运行 mvn jacoco:report 我尝试了你的命令,但它返回相同的“Analyzed bundle 'selenium' with 0 classes”/但是使用这个命令:java -jar jacococli.jar 报告 jacoco.exec --classfiles myapp.jar --html html 我有一个完整的报告!所以我的 exec 文件是正确的,但我不想使用 cli 创建报告
    • 我认为可能有 2 个问题: 1. 它不是在寻找正确的 .exec 文件。请检查一次 maven 日志,看看它是否选择了正确的文件路径。 2. 检查您是否在正确的项目级别运行命令。
    • 1.路径是正确的 2. 我不确定是否理解,但让我想想别的东西,我发现这个问题:github.com/jacoco/jacoco/issues/553“报告的生成需要类文件,报告目标使用执行它的模块类,因此生成报告包含它们,因此您观察到的行为是正确的,因为模块 webapp-integration-tests 没有类。要在 Maven 反应器中包含其他模块的类的报告,请使用报告聚合“我会试试下周一我会再发一遍,让你知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2015-10-18
    • 1970-01-01
    • 2018-07-22
    • 2016-11-25
    • 2016-01-03
    • 2016-05-14
    相关资源
    最近更新 更多