【问题标题】:How to specify the specific packages for the 'jacoco-check'?如何为“jacoco-check”指定特定的包?
【发布时间】:2019-06-01 00:14:55
【问题描述】:

我的项目是使用 Maven 构建的。我使用“Jacoco”插件进行质量检查。

对于一个项目,我想在线检查测试覆盖率。我只想检查 3 个包裹的线路覆盖率。如何指定此检查?

我尝试了“包含”一些软件包,但那不起作用。 我还尝试包含根包级别并排除许多其他包。也不工作。

如何检查包裹 A、B 和 C?请参阅下面的示例:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.9</version>
    <executions>
      ...
      <execution>
        <id>jacoco-check</id>
        <goals>
          <goal>check</goal>
        </goals>
        <configuration>
          <rules>
            <rule>
              <element>PACKAGE</element>
              <includes>
                <include>nl.abc.xyz.package-a.**</include>
                <include>nl.abc.xyz.package-b.**</include>
                <include>nl.abc.xyz.package-c.**</include>
              </includes>
              ... 
              <limits>
                <limit>
                  <counter>LINE</counter>
                  <value>COVEREDRATIO</value>
                  <minimum>0.30</minimum>
                </limit>
              </limits>
            </rule>
          </rules>
        </configuration>
      </execution>
    </executions>
  </plugin>

【问题讨论】:

    标签: jacoco jacoco-maven-plugin


    【解决方案1】:

    ruleincludesexcludes 大约是对应元素的name。 对于&lt;element&gt;PACKAGE&lt;/element&gt;,它们是关于包名称的。 因此

              <includes>
                <include>nl.abc.xyz.package-a.**</include>
                <include>nl.abc.xyz.package-b.**</include>
                <include>nl.abc.xyz.package-c.**</include>
              </includes>
    

    匹配名为 nl.abc.xyz.package-a.something 的示例包,但不匹配 nl.abc.xyz.package-a

    给定

    src/main/java/org/example/a/A.java

    package org.example.a;
    
    public class A {
    }
    

    src/main/java/org/example/a/B.java

    package org.example.b;
    
    public class B {
    }
    

    src/test/java/ExampleTest.java

    public class ExampleTest {
      @org.junit.Test
      public void test() {
        new org.example.a.A();
      }
    }
    

    pom.xml

    <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>org.example</groupId>
      <artifactId>example</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.2</version>
            <executions>
              <execution>
                <id>prepare-agent</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
              </execution>
              <execution>
                <id>report</id>
                <goals>
                  <goal>report</goal>
                </goals>
              </execution>
              <execution>
                <id>check</id>
                <goals>
                  <goal>check</goal>
                </goals>
                <configuration>
                  <rules>
                    <rule>
                      <element>PACKAGE</element>
                      <includes>
                        <include>org.example.b</include>
                      </includes>
                      <limits>
                        <limit>
                          <counter>LINE</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.90</minimum>
                        </limit>
                      </limits>
                    </rule>
                  </rules>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    
    </project>
    

    mvn verify 的执行将按预期失败

    [INFO] --- jacoco-maven-plugin:0.8.2:check (check) @ example ---
    [INFO] Loading execution data file /private/tmp/j/target/jacoco.exec
    [INFO] Analyzed bundle 'example' with 2 classes
    [WARNING] Rule violated for package org.example.b: lines covered ratio is 0.00, but expected minimum is 0.90
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    

    &lt;include&gt;org.example.*&lt;/include&gt; 上替换&lt;include&gt;org.example.b&lt;/include&gt; 后也会失败并显示相同的消息,因为org.example.* 匹配org.example.b。在&lt;include&gt;org.example.a&lt;/include&gt; 上替换后将按预期成功。

    【讨论】:

    • ** 用于遍历目录,它与 * 用于文件名的通配符很重要且不同。
    猜你喜欢
    • 2019-03-07
    • 2011-01-18
    • 2020-08-30
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多