মাভেন জ্যাকো কনফিগারেশন - ক্লাস / প্যাকেজগুলি প্রতিবেদনটি কাজ না করে বাদ দিন


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

আপনার এক্সএমএল কিছুটা ভুল, আপনাকে কোনও বর্ধিত পিতৃ ক্ষেত্রের মধ্যে কোনও শ্রেণীর ব্যতিক্রম যুক্ত করতে হবে, সুতরাং আপনার উপরের কনফিগারেশনটি জ্যাকো ডকস অনুসারে নিম্নলিখিতটির মতো হওয়া উচিত

<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
সোনার সম্পর্কে দুর্দান্ত টিপ। সহজেই ধরে নেওয়া যায় যে জ্যাকো ব্যতিক্রমগুলি সোনারকে স্বয়ংক্রিয়ভাবে প্রস্তাব দেবে (যেমনটি আমি করেছি)।
মার্কডিজার্স

10
আমি যদি কোনও ফাইল ফর্ম জ্যাকোকো বাদ দিই তবে এটি 0% কভারেজ সহ কভারেজ রিপোর্টে প্রদর্শিত হবে। সুতরাং মূলত আমি বাদ না দিয়ে তুলনায় খারাপ ফলাফল পেয়েছি। এটি কি স্থির করা যায়?
অ্যাডাম আর্ল্ড

4
ফাইলের নাম এবং ডট নয় এর মধ্যে স্ল্যাশ ব্যবহার করতে ভুলবেন না। এছাড়াও, ফাইল সমাপ্তি .class এবং জাভা নয়।
থমাসআরএস

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
এইচআই ভ্যাকুয়ার, জ্যাকো ম্যাভেন প্লাগইনের মাধ্যমে প্যাকেজটি বাদ দেওয়ার জন্য আমি আমার মাথাটি মারছি। আমি তৈরি হওয়া সূচকগুলিতে সূচিপত্রের প্যাকেজগুলি প্রদর্শন করতে চাই না is যা আপনার সাথে কোড রয়েছে তা যদি করতে পারেন তবে দয়া করে আমাকে এটিতে সহায়তা করুন। আমাকে ইমভ্রজেন্দ্র
@

3
মনে হচ্ছে বর্গ পথ হওয়া উচিত ছাড়া .classবিভক্তি যেমন: <exclude>**/*com/test/vaquar/khan/HealthChecker</exclude>
hovenko

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 ry এন্ট্রি ফাইল
  • নাম: জাভা / ইউজার / ম্যাপ $ এন্ট্রি.ক্লাস

এজেন্ট পরামিতি, পিঁপড়া কার্য এবং ম্যাভেন প্রস্তুত এজেন্ট লক্ষ্য

  • এর মধ্যে রয়েছে: জাভা নাম (ভিএম নামও কাজ করে)
  • বাদ দেয়: জাভা নাম (ভিএম নামও কাজ করে)
  • exclclassloader: জাভা নাম

এই স্পেসিফিকেশনগুলি ওয়াইল্ডকার্ড * এবং?, যেখানে * ওয়াইল্ডকার্ডগুলি যে কোনও সংখ্যক অক্ষর এমনকি একাধিক নেস্টেড ফোল্ডারগুলিকে অনুমতি দেয়।

ম্যাভেন রিপোর্ট গোল

  • অন্তর্ভুক্ত: ফাইলের নাম
  • বাদ দেয়: ফাইলের নাম

এই চশমাগুলি অ্যান্ট ফাইলস্পেককে ওয়াইল্ডকার্ড *, ** এবং? এর মতো অনুমতি দেয়, যেখানে * কেবলমাত্র একক পথের উপাদানগুলির ওয়াইল্ডকার্ডগুলি।


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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.