代码中需要更改的内容
    image.png
    Dockerfile
    1.在文件中引入jacocoagent.jar,引入后需检查是否引入成功

    1. ADD ./jacocoagent.jar /jacocoagent.jar

    2.打开jacocoagent监控端口,不能与其他jacocoagent端口重复,此端口也是docker容器启动的必填项

    1. EXPOSE 9926

    3.加入jacocoagent启动参数,端口号与第2条填入的参数相同,address由于是docker环境所以默认填0.0.0.0

    1. -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=9926,address=0.0.0.0

    image.png
    pom.xml
    引入jacoco
    image.png

    1. <!--代码覆盖率依赖-->
    2. <dependency>
    3. <groupId>org.jacoco</groupId>
    4. <artifactId>org.jacoco.agent</artifactId>
    5. <version>0.8.7</version>
    6. <classifier>runtime</classifier>
    7. </dependency>

    设置jacoco插件细节
    image.png

    1. <plugin>
    2. <groupId>org.jacoco</groupId>
    3. <artifactId>jacoco-maven-plugin</artifactId>
    4. <version>0.8.7</version>
    5. <executions>
    6. <execution>
    7. <id>default-instrument</id>
    8. <goals>
    9. <goal>instrument</goal>
    10. </goals>
    11. </execution>
    12. <execution>
    13. <id>default-restore-instrumented-classes</id>
    14. <goals>
    15. <goal>restore-instrumented-classes</goal>
    16. </goals>
    17. </execution>
    18. <execution>
    19. <id>report</id>
    20. <phase>prepare-package</phase>
    21. <goals>
    22. <goal>report</goal>
    23. </goals>
    24. </execution>
    25. <execution>
    26. <id>check</id>
    27. <goals>
    28. <goal>check</goal>
    29. </goals>
    30. </execution>
    31. <execution>
    32. <id>prepare-agent</id>
    33. <goals>
    34. <goal>prepare-agent</goal>
    35. </goals>
    36. </execution>
    37. </executions>
    38. <configuration>
    39. <!-- rules里面指定覆盖规则 -->
    40. <rules>
    41. <rule implementation="org.jacoco.maven.RuleConfiguration">
    42. <element>BUNDLE</element>
    43. <limits>
    44. <!-- 指定方法覆盖到80% -->
    45. <limit implementation="org.jacoco.report.check.Limit">
    46. <counter>METHOD</counter>
    47. <value>COVEREDRATIO</value>
    48. <minimum>0.80</minimum>
    49. </limit>
    50. <!-- 指定指令覆盖到80% -->
    51. <limit implementation="org.jacoco.report.check.Limit">
    52. <counter>INSTRUCTION</counter>
    53. <value>COVEREDRATIO</value>
    54. <minimum>0.80</minimum>
    55. </limit>
    56. <!-- 指定行覆盖到80% -->
    57. <limit implementation="org.jacoco.report.check.Limit">
    58. <counter>LINE</counter>
    59. <value>COVEREDRATIO</value>
    60. <minimum>0.80</minimum>
    61. </limit>
    62. <!-- 指定类覆盖到100%,不能遗失任何类 -->
    63. <limit implementation="org.jacoco.report.check.Limit">
    64. <counter>CLASS</counter>
    65. <value>MISSEDCOUNT</value>
    66. <maximum>0</maximum>
    67. </limit>
    68. </limits>
    69. </rule>
    70. </rules>
    71. </configuration>
    72. </plugin>
    73. <plugin>
    74. <groupId>org.jacoco</groupId>
    75. <artifactId>jacoco-maven-plugin</artifactId>
    76. <version>0.8.7</version>
    77. <configuration>
    78. <destFile>jacoco.exec</destFile>
    79. <dataFile>jacoco.exec</dataFile>
    80. </configuration>
    81. <executions>
    82. <execution>
    83. <id>jacoco-initialize</id>
    84. <goals>
    85. <goal>prepare-agent</goal>
    86. </goals>
    87. </execution>
    88. <execution>
    89. <id>jacoco-site</id>
    90. <phase>test</phase>
    91. <goals>
    92. <goal>report</goal>
    93. </goals>
    94. </execution>
    95. </executions>
    96. </plugin>

    到此代码部分的已经设置完成,接下来是docker的设置
    在原有的容器端口外,加上上面设置的jacocoagent端口,设置完成后,点击ok
    image.png
    到此,覆盖率文件已经生成,接下来是获取覆盖率文件exec
    首先在服务端机器上配置ant
    然后创建build.xml,用于通过ant获取覆盖率文件

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project name="Jacoco" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
    3. <property name="jacocoantPath" value="/usr/local/jacoco_test/jacoco-0.8.7/lib/jacocoant.jar"/>
    4. <property name="integrationJacocoexecPath" value="./jacoco-integration.exec"/>
    5. <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
    6. <classpath path="${jacocoantPath}" />
    7. </taskdef>
    8. <?如果需要获取多个容器的覆盖率信息,则dump里添加多个的jacocoagent监控端口就可?>
    9. <target name="dump">
    10. <jacoco:dump address="0.0.0.0" port="9926" reset="false" destfile="${integrationJacocoexecPath}" append="true"/>
    11. <jacoco:dump address="0.0.0.0" port="9928" reset="false" destfile="${integrationJacocoexecPath}" append="true"/>
    12. </target>
    13. </project>

    最后,使用idea分析覆盖率文件即可!