मावेन जैकोको कॉन्फ़िगरेशन - रिपोर्ट से वर्गों / पैकेजों को न हटाएं


103

मेरे पास एक मावेन मल्टी-मॉड्यूल प्रोजेक्ट है और मैं कोड कवरेज रिपोर्ट के लिए जैकोको-मावेन का उपयोग कर रहा हूं। कुछ वर्गों की रिपोर्ट नहीं की जानी चाहिए, क्योंकि वे स्प्रिंग कॉन्फ़िगरेशन हैं और मुझे उनमें कोई दिलचस्पी नहीं है।

मैंने मावेन-जकोको प्लगइन को निम्नलिखित के रूप में घोषित किया है:

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.2.201409121644</version>
<configuration>
    <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
    <exclude>some.package.*</exclude>
    <exclude>**/*Config.*</exclude>
    <exclude>**/*Dev.*</exclude>
    <exclude>some/package/SomeClass.java</exclude>
</configuration>
<executions>
    <execution>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
    </execution>
    <execution>
        <id>report</id>
        <phase>prepare-package</phase>
        <goals>
            <goal>report</goal>
        </goals>
    </execution>
    <execution>
        <id>post-unit-test</id>
        <phase>test</phase>
        <goals>
            <goal>report</goal>
        </goals>
    </execution>
</executions>
</plugin>

समस्या यह है कि जब मैं mvn clean verifyजैकोको निष्पादित करता हूं तब भी उन वर्गों की रिपोर्ट करता है जिन्हें मेरे एक्सएमएल कॉन्फ़िगरेशन बिंदुओं के रूप में बाहर रखा जाना चाहिए था। मैं इसे कैसे ठीक से कॉन्फ़िगर कर सकता हूं?

जवाबों:


181

आपका XML थोड़ा गलत है, आपको किसी मूल वर्ग के बाहर किसी भी वर्ग के बहिष्करण को जोड़ने की आवश्यकता है, इसलिए आपका उपरोक्त विन्यास जैकोको डॉक्स के अनुसार निम्न जैसा दिखना चाहिए।

<configuration>
    <excludes>
        <exclude>**/*Config.*</exclude>
        <exclude>**/*Dev.*</exclude>
    </excludes>
</configuration>

बहिष्कृत फ़ील्ड का मान निर्देशिका लक्ष्य / कक्षाओं के सापेक्ष संकलित कक्षाओं के वर्ग पथ (पैकेज नाम नहीं) होना चाहिए और मानक वाइल्डकार्ड सिंटैक्स का उपयोग करना चाहिए।

*   Match zero or more characters
**  Match zero or more directories
?   Match a single character

आप इस तरह से एक पैकेज और उसके सभी बच्चों / उप-पैकेजों को भी बाहर कर सकते हैं:

<exclude>some/package/**/*</exclude>

इसमें हर वर्ग के some.packageसाथ-साथ किसी भी बच्चे को शामिल नहीं किया जाएगा। उदाहरण के लिए, some.package.childरिपोर्ट में शामिल नहीं किया जाएगा।

मैंने उपरोक्त वर्गों का उपयोग करते हुए कक्षाओं की कम संख्या पर परीक्षण और अपनी रिपोर्ट लक्ष्य रिपोर्ट की है।

यदि आप इस रिपोर्ट को सोनार में धकेल रहे हैं, तो आपको सोनार को सोनार सेटिंग्स में किए जा सकने वाले इन वर्गों को बाहर करने के लिए बताना होगा।

सेटिंग्स> सामान्य सेटिंग्स> बहिष्करण> कोड कवरेज

सोनार डॉक्स इसे थोड़ा और बताते हैं

अपने आदेश के ऊपर चल रहा है

mvn clean verify

दिखाएगा कि कक्षाओं को बाहर रखा गया है

कोई बहिष्करण नहीं

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
[INFO] Analyzed bundle '**' with 37 classes

अपवर्जन के साथ

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
[INFO] Analyzed bundle '**' with 34 classes

उम्मीद है की यह मदद करेगा


2
मुझे बहिष्करण को ध्यान में रखने के लिए संस्करण 0.7.5 से 0.7.6 तक जैकोको प्लगइन को अपग्रेड करना पड़ा।
स्टीफन

2
सोनार के संबंध में शानदार टिप। यह मान लेना आसान है कि JaCoCo बहिष्करण स्वचालित रूप से सोनार को प्रचारित करेगा (जैसे मैंने किया)।

10
अगर मैं एक फाइल फॉर्म को हटाता हूं तो यहॉकोको कवरेज रिपोर्ट में 0% कवरेज के साथ दिखाई देता है। इसलिए मूल रूप से मुझे बाहर नहीं की तुलना में खराब परिणाम मिलते हैं। क्या इसे ठीक किया जा सकता है?
अदम अरोल्ड जूल

4
फ़ाइल नाम और डॉट के बीच स्लैश का उपयोग करना याद रखें। इसके अलावा, फ़ाइल समाप्ति .class और नहीं .java है।
थॉमसआरएस

1
** और * के प्रभाव को समझना महत्वपूर्ण है। यदि आप ** को शामिल नहीं करते हैं और फिर यह अंतर्निहित निर्देशिकाओं में आगे नहीं बढ़ेगा। * एक एकल वर्ण है और इसका उपयोग फ़ाइल नाम के प्रयोजनों के लिए किया जाना चाहिए।
स्मार्ट कोडर

18

हालांकि एंड्रयू ने पहले से ही विवरण के साथ सवाल का जवाब दिया था, मैं कोड दे रहा हूं कि इसे पोम में कैसे छोड़ना है

           <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <configuration>
                    <excludes>
                        <exclude>**/*com/test/vaquar/khan/HealthChecker.class</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <!-- prepare agent for measuring integration tests -->
                    <execution>
                        <id>jacoco-initialize</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <phase>package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

स्प्रिंगबूट एप्लिकेशन के लिए

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                       <!-- Exclude class from test coverage -->
                        <exclude>**/*com/khan/vaquar/Application.class</exclude>
                        <!-- Exclude full package from test coverage -->
                        <exclude>**/*com/khan/vaquar/config/**</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

1
HI Vaquar, मैं अपने सिर को जैकोको मावेन प्लगइन के माध्यम से पैकेज के बहिष्कार के लिए मार रहा हूं। मैं Index.html पर बहिष्कृत पैकेज नहीं दिखाना चाहता जो बनाया गया है .. यदि आपके पास कोड है तो आप भी ऐसा कर सकते हैं, कृपया मेरी मदद करें। मुझे imvrajendra@gmail.com पर कोड भेजें
व्रजेन्द्र सिंह मंडलोई

3
ऐसा लगता है कि क्लास का रास्ता बिना .classखत्म हुए होना चाहिए , जैसे: <exclude>**/*com/test/vaquar/khan/HealthChecker</exclude>
होवेन्को

3
यह मेरे लिए पूरे पैकेज को रिपोर्ट से हटा देता है: <exclude>com/mycompany/mypackage/**/*</exclude>
जिम टफ

4

एक और समाधान:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.5.201505241946</version>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>default-report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>default-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule implementation="org.jacoco.maven.RuleConfiguration">
                        <excludes>
                            <exclude>com.mypackage1</exclude
                            <exclude>com.mypackage2</exclude>
                        </excludes>
                        <element>PACKAGE</element>
                        <limits>
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>COMPLEXITY</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.85</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

कृपया ध्यान दें, हम "<element>PACKAGE</element>"कॉन्फ़िगरेशन में उपयोग कर रहे हैं जो तब हमें पैकेज स्तर पर बाहर करने में मदद करता है।


मैं जाकोको-मावेन-प्लगइन का उपयोग कर रहा हूं: 0.7.9। आपके समाधान के साथ, यह परिणामों की सही गणना करता है। हालाँकि, प्रोजेक्ट के सभी क्लैक्शन जैकोको रिपोर्ट (index.html) में दिखाई देते हैं। क्या रिपोर्ट में यह दिखाना संभव है कि कवर किए गए अनुपात का वास्तविक मान रखने के लिए प्लगइन ने क्या विश्लेषण किया है?
aloplop85

3

https://github.com/jacoco/jacoco/issues/34

हमारे पास इन वर्गों के लिए अलग-अलग सूचनाएं हैं:

  • वीएम नाम: जावा / उपयोग / नक्शा $ प्रविष्टि
  • जावा नाम: java.util.Map $ एंट्री फ़ाइल
  • नाम: जावा / उपयोग / नक्शा $ एंट्री.क्लास

एजेंट पैरामीटर, चींटी कार्य और मावेन तैयार-एजेंट लक्ष्य

  • शामिल हैं: जावा नाम (वीएम नाम भी काम करता है)
  • बाहर: जावा नाम (वीएम नाम भी काम करता है)
  • exclclassloader: Java नाम

ये विनिर्देश वाइल्डकार्ड * और? की अनुमति देते हैं, जहां * वाइल्डकार्ड किसी भी संख्या में वर्ण, यहां तक ​​कि कई नेस्टेड फ़ोल्डर भी।

मावेन रिपोर्ट लक्ष्य

  • शामिल हैं: फ़ाइल का नाम
  • बाहर: फ़ाइल का नाम

ये चश्मा वाइल्डकार्ड *, ** और? जैसे एंट फाइल्सपेक की अनुमति देते हैं, जहां केवल एक पथ तत्व के * वाइल्डकार्ड भाग।


3

Sonar.coverage.exclusions गुण का उपयोग करें।

mvn clean install -Dsonar.coverage.exclusions=**/*ToBeExcluded.java

इसे कक्षाओं को कवरेज गणना से बाहर करना चाहिए।


2

आप जकोको प्लगइन के विन्यास के बाहर, सोनार गुणों में कवरेज बहिष्करण को कॉन्फ़िगर कर सकते हैं:

...
<properties>
    ....
    <sonar.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.exclusions>
    <sonar.test.exclusions>
        src/test/**/*
    </sonar.test.exclusions>
    ....
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.coverage.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.coverage.exclusions>
    <jacoco.version>0.7.5.201505241946</jacoco.version>
    ....
</properties>
....

और प्लगइन से बहिष्करण सेटिंग्स को हटाने के लिए याद रखें


1

यहाँ pom.xmlफ़ाइल में काम कर रहा नमूना है ।

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>${jacoco.version}</version>


        <executions>
            <execution>
                <id>prepare-agent</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <execution>
                <id>post-unit-test</id>
                <phase>test</phase>
                <goals>
                    <goal>report</goal>
                </goals>

            </execution>

            <execution>
                <id>default-check</id>
                <goals>
                    <goal>check</goal>
                </goals>

            </execution>
        </executions>
        <configuration>
            <dataFile>target/jacoco.exec</dataFile>
            <!-- Sets the output directory for the code coverage report. -->
            <outputDirectory>target/jacoco-ut</outputDirectory>
            <rules>
                <rule implementation="org.jacoco.maven.RuleConfiguration">
                    <element>PACKAGE</element>
                    <limits>
                        <limit implementation="org.jacoco.report.check.Limit">
                            <counter>COMPLEXITY</counter>
                            <value>COVEREDRATIO</value>
                            <minimum>0.00</minimum>
                        </limit>
                    </limits>
                </rule>
            </rules>
            <excludes>
                <exclude>com/pfj/fleet/dao/model/**/*</exclude>
            </excludes>
            <systemPropertyVariables>

                <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
            </systemPropertyVariables>
        </configuration>
    </plugin>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.