একত্রীকরণের কভারেজ রিপোর্ট দেওয়ার জন্য কীভাবে মাল্টি-মডিউল মাভেন + সোনার + জ্যাকোকো কনফিগার করবেন?


128

আমি এটির জন্য ইন্টারনেট অনুসন্ধান এবং নিচে পেয়েছি। মাভেনের বৈশিষ্ট্য যেমন ${sonar.jacoco.reportPath}, org.jacoco:jacoco-maven-plugin:prepare-agentবা সেটিংয়ের maven-surefire-plugin argLineসাথে করার জন্য সেখানে প্রচুর অর্ধ-উত্তর রয়েছে -javaagent

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

কোথাও একটি নির্দিষ্ট কনফিগারেশন আছে, এটি অর্জন করার জন্য, দয়া করে?

উত্তর:


164

আমি আপনার মতো একই পরিস্থিতিতে ছিলাম, ইন্টারনেটে ছড়িয়ে ছিটিয়ে থাকা অর্ধেক উত্তরগুলি বেশ বিরক্তিকর ছিল, যেহেতু মনে হয়েছিল যে অনেকেরই একই সমস্যা রয়েছে তবে তারা কীভাবে এটি সমাধান করেছেন তা পুরোপুরি ব্যাখ্যা করার জন্য কেউ বিরক্ত হতে পারে না।

সোনার ডক্স পড়ুন উদাহরণ সঙ্গে একটি GitHub প্রকল্পের যে সহায়ক। এটি সমাধান করার জন্য আমি যা করেছি তা হ'ল নিয়মিত ইউনিট পরীক্ষায় ইন্টিগ্রেশন টেস্টের যুক্তি প্রয়োগ করা (যদিও সঠিক ইউনিট পরীক্ষাগুলি সাব-মডিউল নির্দিষ্ট হওয়া উচিত, এটি সর্বদা ক্ষেত্রে হয় না)।

প্যারেন্ট pom.xML এ, এই বৈশিষ্ট্যগুলি যুক্ত করুন:

<properties>
    <!-- Sonar -->
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.language>java</sonar.language>
</properties>

এটি সোনার একই জায়গায় সমস্ত সাবমডিউলের জন্য ইউনিট পরীক্ষার প্রতিবেদনগুলি তৈরি করবে (প্যারেন্ট প্রোজেক্টের একটি লক্ষ্য ফোল্ডার)। এটি সোনারকে রিপোর্টগুলি পুনরায় ব্যবহার করতেও বলেছে যার নিজস্ব ঘূর্ণায়নের পরিবর্তে ম্যানুয়ালি চালিত হয়েছিল। আমাদের কেবল জেডো-ম্যাভেন-প্লাগইনটি তৈরি করতে / প্লাগইনের অভ্যন্তরে প্যারেন্ট পম এ রেখে সমস্ত সাবমোডিয়ুলের জন্য চালানো দরকার:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.0.201210061924</version>
    <configuration>
        <destFile>${sonar.jacoco.reportPath}</destFile>
        <append>true</append>
    </configuration>
    <executions>
        <execution>
            <id>agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
    </executions>
</plugin>

destFileসোনার এটির জন্য অনুসন্ধান ফাইলটি সেই জায়গায় রাখে এবং appendফাইলটি ওভাররাইট করার চেয়ে ফাইলটিতে সংযুক্ত করে। এটি একই ফাইলের সমস্ত সাবমোডিয়ুলের জন্য সমস্ত জ্যাকোকো প্রতিবেদনগুলিকে একত্রিত করবে।

সোনার প্রতিটি সাবমডিউলের জন্য সেই ফাইলটি দেখবে, যেহেতু আমরা তাকে উপরে দেখিয়েছি, সোনার মাল্টি মডিউল ফাইলগুলির জন্য আমাদের একক ইউনিট পরীক্ষার ফলাফল দেয়।


অবিশ্বাস্য! এটি কাজ করেছে। অবশেষে! আমি মনে করি জাদু অত্যাবশ্যক জাদুমন্ত্রোচ্চারণ যে আমি অনুপস্থিত ছিল অনুপস্থিত ছিল <পরিশেষে যোগ> সত্য </ পরিশেষে যোগ>
স্টুয়ার্ট

এটি কাজ করে! নতুন প্রতিবেদনের পথটি উত্পন্ন করার জন্য আমাকে mvn packageদৌড়ানোর আগে একটি নতুন কাজ করতে হয়েছিল mvn sonar:sonar
thomasa88

2
উদাহরণস্বরূপ, "Sonar.jacoco.itReportPath" সম্পত্তিটি "সামগ্রিক কোডের কভারেজ" এ মার্জড ফলাফল পেতে ব্যবহার করা উচিত। উত্তর আপডেট করুন।
ইয়ভেস মার্টিন

4
"সোনার.অডিনামিক অ্যানালাইসিস" অবমূল্যায়ন করা হয়েছে: ডকসস.সোনারক্বে.অর্গ
ইয়ভেস মার্টিন


23

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

সেই সময় থেকে আমার মাথার উপরের প্রশ্নগুলি আমি জ্যাকো দিয়ে পাগল হয়ে গিয়েছিলাম।

আমার অ্যাপ্লিকেশন সার্ভার (জেবস, গ্লাসফিশ ..) ইরাক, সিরিয়ায় অবস্থিত, যাই হোক না কেন .. এটিতে ইন্টিগ্রেশন পরীক্ষা চলাকালীন মাল্টি-মডিউল কভারেজ পাওয়া কি সম্ভব? জেনকিনস এবং সোনারও বিভিন্ন সার্ভারে রয়েছেন।

হ্যাঁ. আপনাকে জ্যাকোকো এজেন্ট ব্যবহার করতে হবে যা মোডে output=tcpserverজ্যাকোকো পিঁপড়া ব্যবহার করে। মূলত দুটি jarএস। এটি আপনাকে 99% সাফল্য দেবে।

জ্যাকো এজেন্ট কীভাবে কাজ করে?

আপনি একটি স্ট্রিং সংযোজন

-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*

আপনার অ্যাপ্লিকেশন সার্ভারে JAVA_OPTS এবং এটি পুনরায় চালু করুন। এই স্ট্রিংটিতে কেবল [your_path]জ্যাকোকোজেন্ট.জারের পাথের সাথে প্রতিস্থাপন করতে হবে, আপনার ভিএম-এ অ্যাপ্লিকেশন সার্ভারটি চালিত সেখানে সংরক্ষণ করুন (এটি সংরক্ষণ করুন!)। সেই সময় থেকে আপনি অ্যাপ্লিকেশন সার্ভারটি শুরু করার পরে, মোতায়েন করা সমস্ত অ্যাপ্লিকেশনগুলি গতিশীলভাবে পর্যবেক্ষণ করা হবে এবং তাদের ক্রিয়াকলাপ (যার অর্থ কোড ব্যবহার) টিসিএল অনুরোধের দ্বারা জ্যাকোকাস। এক্সেক ফর্ম্যাটটিতে আসার জন্য আপনাকে প্রস্তুত থাকবে।

আমার পরীক্ষা শুরু হওয়ার পর থেকেই আমি কী জেকো এজেন্টকে পুনরায় নির্বাহের ডেটা সংগ্রহ শুরু করতে পারি?

হ্যাঁ, সেই উদ্দেশ্যে আপনার জেনকিনস ওয়ার্কস্পেসে অবস্থিত জ্যাকোঅ্যান্ট.জার এবং পিঁপড়া বিল্ড স্ক্রিপ্টের প্রয়োজন।

সুতরাং মূলতঃ http://www.eclemma.org/jacoco/ এর থেকে আমার যা জিনকিনস ওয়ার্কস্পেসে অবস্থিত জ্যাকোয়্যান্ট.জার, এবং আমার অ্যাপ্লিকেশন সার্ভার ভিএম-এ অবস্থিত জ্যাকোএজেন্ট.জারটি আমার কী প্রয়োজন?

সেটা ঠিক.

আমি পিঁপড়া ব্যবহার করতে চাই না, শুনেছি জ্যাকোকো মাভেন প্লাগইন সব কিছু করতে পারে।

এটি ঠিক নয়, জ্যাকোকো ম্যাভেন প্লাগইন ইউনিট পরীক্ষার ডেটা এবং কিছু সংহতকরণ পরীক্ষার ডেটা সংগ্রহ করতে পারে ( আর্কুইলিয়ান জ্যাকো দেখুন ), তবে আপনার যদি জেনকিন্সে পৃথক বিল্ড হিসাবে বিশ্রামের আশ্বাসপ্রাপ্ত পরীক্ষাগুলি থাকে এবং আপনি মাল্টি-মডিউল কভারেজ দেখাতে চান তবে আমি পারি ম্যাভেন প্লাগইন আপনাকে কীভাবে সহায়তা করতে পারে তা দেখুন না।

জ্যাকোকো এজেন্ট ঠিক কী উত্পাদন করে?

.execবিন্যাসে কেবল কভারেজ ডেটা । সোনার তখন তা পড়তে পারে।

আমার জাভা ক্লাসগুলি কোথায় অবস্থিত তা জ্যাকোকে জানা দরকার?

না, সোনার করে, তবে জ্যাকো নয়। আপনি যখন mvn sonar:sonarক্লাসে পাথ করেন তখন খেলাধুলায় আসে।

তাহলে পিপীলিকার লিপিটি কী?

এটি আপনার জেনকিন্স ওয়ার্কস্পেসে উপস্থাপন করতে হবে। আমার পিপীলিকার লিপি, আমি এটি jacoco.xmlদেখতে দেখতে বলেছিলাম :

<project name="Jacoco library to collect code coverage remotely" xmlns:jacoco="antlib:org.jacoco.ant">
    <property name="jacoco.port" value="6300"/>
    <property name="jacocoReportFile" location="${workspace}/it-jacoco.exec"/>

    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
        <classpath path="${workspace}/tools/jacoco/jacocoant.jar"/>
    </taskdef>

    <target name="jacocoReport">
            <jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
    </target>

    <target name="jacocoReset">
            <jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
        <delete file="${jacocoReportFile}"/>
    </target>
</project>

এই স্ক্রিপ্টটি চালু -Dworkspace=$WORKSPACE করার সময় আপনার দুটি বাধ্যতামূলক প্যারামগুলি পাস করা উচিত যা আপনার জেনকিনস ওয়ার্কস্পেস এবং -Djacoco.host=yourappserver.comহোস্ট ছাড়াই এটি নির্দেশ করতে ব্যবহার করুনhttp://

এছাড়াও লক্ষ্য করুন যে আমি আমার my jacocoant.jar{ওয়ার্কস্পেস} / টলস / জ্যাকোকো / জ্যাকোকোয়েন্ট.জারে রেখেছি

এরপর আমার কি করা উচিৎ?

আপনি জ্যাকোএজেন্ট.জার দিয়ে আপনার অ্যাপ্লিকেশন সার্ভারটি শুরু করেছিলেন?

আপনি কি জিনকিনসের কর্মক্ষেত্রে পিপীলিকার স্ক্রিপ্ট এবং জ্যাকোয়্যান্ট.জার রেখেছেন?

যদি হ্যাঁ তবে শেষ পদক্ষেপটি হ'ল জেনকিনস বিল্ডটি কনফিগার করা। কৌশলটি এখানে:

  1. jacocoResetপূর্ববর্তী সমস্ত সংগৃহীত ডেটা পুনরায় সেট করতে পিঁপড়ের লক্ষ্যবস্তু ডেকে আনুন ।
  2. আপনার পরীক্ষা চালান
  3. jacocoReportরিপোর্ট পেতে পিঁপড়ের টার্গেট ডেকে আনুন

যদি সবকিছু ঠিক থাকে তবে it-jacoco.execআপনি আপনার বিল্ড ওয়ার্কস্পেসে দেখতে পাবেন ।

স্ক্রিনশটটি দেখুন, আমি antআমার ওয়ার্কস্পেসেও $WORKSPACE/tools/antডিয়ার ইনস্টল করেছি , তবে আপনি নিজের জিনকিনসে ইনস্টল করা একটি ব্যবহার করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

সোনারে এই প্রতিবেদনটি কীভাবে ঠেলাবেন?

ম্যাভেন sonar:sonarকাজটি করবেন (এটি কনফিগার করতে ভুলবেন না), এটিকে প্রধান pom.xML এ নির্দেশ করুন যাতে এটি সমস্ত মডিউল জুড়ে চলে। sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.execআপনার ইন্টিগ্রেশন পরীক্ষার রিপোর্টটি কোথায় অবস্থিত তা সোনারকে জানানোর জন্য প্যারামিটার ব্যবহার করুন । প্রতিবার এটি নতুন মডিউল শ্রেণীর বিশ্লেষণ করবে, এটি কভারেজ সম্পর্কিত তথ্য সন্ধান করবে it-jacoco.exec

আমার ইতিমধ্যে আমার `টার্গেট দির, v এমভিএন সোনারে জ্যাকোকো.এক্সেক রয়েছে: সোনার it এটিকে উপেক্ষা / মুছে ফেলে

ডিফল্টরূপে আপনার টার্গেট dir mvn sonar:sonarকরে cleanএবং মুছে দেয় , sonar.dynamicAnalysis=reuseReportsএড়াতে ব্যবহার করুন ।


20

নতুন উপায়ে সংস্করণ 0.7.7

সংস্করণ 0.7.7 যেহেতু সমষ্টিগত প্রতিবেদন তৈরির একটি নতুন উপায় রয়েছে:

আপনি একটি পৃথক 'প্রতিবেদন' প্রকল্প তৈরি করেন যা সমস্ত প্রয়োজনীয় প্রতিবেদন সংগ্রহ করে (এগ্রিগেটর প্রকল্পের কোনও লক্ষ্য তার মডিউলগুলির আগে কার্যকর করা হয় তাই এটি ব্যবহার করা যায় না)।

aggregator pom
  |- parent pom
  |- module a
  |- module b
  |- report module 

রুট পম ভালো দেখায় (মডিউল অধীনে নতুন রিপোর্ট মডিউল যোগ করতে ভুলবেন না):

<build>
<plugins>
  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.8</version>
    <executions>
      <execution>
        <id>prepare-agent</id>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

প্রতিটি উপ মডিউল থেকে পমগুলি মোটেও পরিবর্তন করার দরকার নেই। থেকে পম প্রতিবেদন মডিউল ভালো দেখায়:

<!-- Add all sub modules as dependencies here -->
<dependencies>
  <dependency>
    <module a>
  </dependency>
  <dependency>
    <module b>
  </dependency>
 ...

  <build>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.8</version>
        <executions>
          <execution>
            <id>report-aggregate</id>
            <phase>verify</phase>
            <goals>
              <goal>report-aggregate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

একটি সম্পূর্ণ উদাহরণ এখানে পাওয়া যাবে


3
এইটা কাজ করে. সামগ্রিক প্রতিবেদনটি সমস্ত মডিউলগুলির জন্য ক্রমযুক্ত কোড কভারেজ দেখায়। আপনি কি সোনার এই संचयी প্রতিবেদনটি দেখার চেষ্টা করেছেন? আমি স্বতন্ত্র প্রতিবেদনের জন্য জ্যাকোকো.এক্সেক পড়তে সোনার-কোবে ব্যবহার করেছি, তবে এই প্রতিবেদনের সমষ্টি সহ, আমি প্রতিবেদনের মডিউলে একটি সংযুক্ত জ্যাকো.এক্সেক দেখতে পাচ্ছি না।
সোয়েথা ভি

@ সোয়েতাভ এতে কোন সাফল্য? আমরা একই অবস্থানে
রয়েছি

আমরা সোনার কোবে সংস্করণ X. এক্স ব্যবহার করি যার নিজস্ব পরীক্ষা কভারেজ পৃষ্ঠা রয়েছে সুতরাং আমার সেখানে জ্যাকোকোর দরকার নেই। পুরানো সংস্করণের জন্য আমরা কোবার্টুরা প্লাগইন ইনস্টল করেছি যা এই কার্যকারিতাটি সরবরাহ করে ...
লোনজাক

11

আমি আমার সমাধানটি পোস্ট করবো কারণ এটি অন্যদের থেকে একেবারে পৃথক হয়ে গেছে এবং বিদ্যমান উত্তরগুলির সহায়তায় সঠিক হওয়ার জন্য আমাকে একটি শক্ত দিনও লাগল।

মাল্টি-মডিউল মাভেন প্রকল্পের জন্য:

ROOT
|--WAR
|--LIB-1
|--LIB-2
|--TEST

যেখানে WARপ্রকল্পটি মূল ওয়েব অ্যাপ্লিকেশন, সেখানে LIB1 এবং 2 অতিরিক্ত মডিউলগুলি WARনির্ভর করে এবং TESTযেখানে ইন্টিগ্রেশন টেস্টগুলি লাইভ থাকে। TESTএকটি এম্বেডড টমকেট উদাহরণটি স্পিন করে (টমক্যাট প্লাগইনের মাধ্যমে নয়) এবং WARপ্রকল্প চালায় এবং তাদের জুনিট পরীক্ষার একটি সেট দিয়ে পরীক্ষা করে। WARএবং LIBপ্রকল্প উভয় তাদের নিজস্ব ইউনিট পরীক্ষা আছে।

এই সমস্তের ফলাফল হ'ল ইন্টিগ্রেশন এবং ইউনিট পরীক্ষার কভারেজ পৃথক করা এবং সোনারকিউবে আলাদা করতে সক্ষম।

ROOT pom.xml

<!-- Sonar properties-->
<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.language>java</sonar.language>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>

<!-- build/plugins (not build/pluginManagement/plugins!) -->
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.6.201602180812</version>
    <executions>
        <execution>
            <id>agent-for-ut</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
            <configuration>
                <append>true</append>
                <destFile>${sonar.jacoco.reportPath}</destFile>
            </configuration>
        </execution>
        <execution>
            <id>agent-for-it</id>
            <goals>
                <goal>prepare-agent-integration</goal>
            </goals>
            <configuration>
                <append>true</append>
                <destFile>${sonar.jacoco.itReportPath}</destFile>
            </configuration>
        </execution>
    </executions>
</plugin>

WAR, LIB এবং TEST pom.xmlJaCoCo প্লাগইনগুলি কার্যকর করার উত্তরাধিকারী হবে।

TEST pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
            <configuration>
                <skipTests>${skip.tests}</skipTests>
                <argLine>${argLine} -Duser.timezone=UTC -Xms256m -Xmx256m</argLine>
                <includes>
                    <includes>**/*Test*</includes>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

আমি প্যাট্রি কইনুলাইনেন্স ব্লগ পোস্টটি 'জাওকো মাভেন প্লাগইন সহ ইউনিট এবং ইন্টিগ্রেশন টেস্টগুলির জন্য কোড কভারেজ রিপোর্ট তৈরি করা' জাওকো সেটআপ পক্ষের পক্ষে মূল্যবান হিসাবে খুঁজে পেয়েছি।


আমার এই পোস্টটি কিছু পর্যায়ে আপডেট করা দরকার কারণ এটি আসলে কিছুটা সাবমোটিমাল। মডিউলটিতে agent-for-itপরীক্ষা চালানোর সময় কেবলমাত্র প্রয়োজনীয় TESTতবে বর্তমান কনফিগারেশনটি এটি অন্য প্রতিটি মডিউলের জন্য চলছে, যেখানে এর কোনও মূল্য নেই। উন্নতিটি agent-for-utঅন্য সমস্ত মডিউলগুলিতে agent-for-itচালিত হয়ে কেবল চালানো হবে TEST
মার্কডিজাররা

6

আমি আমার প্যারেন্ট লেভেলের পোমে কনফিগারেশনটি ব্যবহার করি যেখানে আমার পৃথক ইউনিট এবং ইন্টিগ্রেশন পরীক্ষার পর্যায় রয়েছে।

আমি প্যারেন্ট POM বৈশিষ্ট্যে নিম্নলিখিত বৈশিষ্ট্যগুলি কনফিগার করি

    <maven.surefire.report.plugin>2.19.1</maven.surefire.report.plugin>
    <jacoco.plugin.version>0.7.6.201602180812</jacoco.plugin.version>
    <jacoco.check.lineRatio>0.52</jacoco.check.lineRatio>
    <jacoco.check.branchRatio>0.40</jacoco.check.branchRatio>
    <jacoco.check.complexityMax>15</jacoco.check.complexityMax>
    <jacoco.skip>false</jacoco.skip>
    <jacoco.excludePattern/>
    <jacoco.destfile>${project.basedir}/../target/coverage-reports/jacoco.exec</jacoco.destfile>

    <sonar.language>java</sonar.language>
    <sonar.exclusions>**/generated-sources/**/*</sonar.exclusions>
    <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
    <sonar.coverage.exclusions>${jacoco.excludePattern}</sonar.coverage.exclusions>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/../target/coverage-reports</sonar.jacoco.reportPath>

    <skip.surefire.tests>${skipTests}</skip.surefire.tests>
    <skip.failsafe.tests>${skipTests}</skip.failsafe.tests>

আমি প্লাগইন সংজ্ঞাগুলি প্লাগইন পরিচালনার অধীনে রাখি।

নোট করুন যে আমি জেকোকে জাভাজনেন্টকে প্রতিটি পরীক্ষার সাথে চালানোর জন্য কনফিগার করার অনুমতি দেওয়ার জন্য নিশ্চিতফায়ার (নিশ্চিতফায়ারআর্গলাইন) এবং ফেইলসেফ (ফেইলসএফআর্গলাইন) যুক্তিগুলির জন্য একটি সম্পত্তি সংজ্ঞায়িত করেছি।

প্লাগইন ম্যানেজমেন্টের অধীনে

  <build>
     <pluginManagment>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <fork>true</fork>
                    <meminitial>1024m</meminitial>
                    <maxmem>1024m</maxmem>
                    <compilerArgument>-g</compilerArgument>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <forkCount>4</forkCount>
                    <reuseForks>false</reuseForks>
                    <argLine>-Xmx2048m ${surefireArgLine}</argLine>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                    <excludes>
                        <exclude>**/*IT.java</exclude>
                    </excludes>
                    <skip>${skip.surefire.tests}</skip>
                </configuration>
            </plugin>
            <plugin>
                <!-- For integration test separation -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.19.1</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.19.1</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <forkCount>4</forkCount>
                    <reuseForks>false</reuseForks>
                    <argLine>${failsafeArgLine}</argLine>
                    <includes>
                        <include>**/*IT.java</include>
                    </includes>
                    <skip>${skip.failsafe.tests}</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>verify</id>
                        <goals>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <!-- Code Coverage -->
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.plugin.version}</version>
                <configuration>
                    <haltOnFailure>true</haltOnFailure>
                    <excludes>
                        <exclude>**/*.mar</exclude>
                        <exclude>${jacoco.excludePattern}</exclude>
                    </excludes>
                    <rules>
                        <rule>
                            <element>BUNDLE</element>
                            <limits>
                                <limit>
                                    <counter>LINE</counter>
                                    <value>COVEREDRATIO</value>
                                    <minimum>${jacoco.check.lineRatio}</minimum>
                                </limit>
                                <limit>
                                    <counter>BRANCH</counter>
                                    <value>COVEREDRATIO</value>
                                    <minimum>${jacoco.check.branchRatio}</minimum>
                                </limit>
                            </limits>
                        </rule>
                        <rule>
                            <element>METHOD</element>
                            <limits>
                                <limit>
                                    <counter>COMPLEXITY</counter>
                                    <value>TOTALCOUNT</value>
                                    <maximum>${jacoco.check.complexityMax}</maximum>
                                </limit>
                            </limits>
                        </rule>
                    </rules>
                </configuration>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <destFile>${jacoco.destfile}</destFile>
                            <append>true</append>
                            <propertyName>surefireArgLine</propertyName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${jacoco.destfile}</dataFile>
                            <outputDirectory>${sonar.jacoco.reportPath}</outputDirectory>
                            <skip>${skip.surefire.tests}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pre-integration-test</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>prepare-agent-integration</goal>
                        </goals>
                        <configuration>
                            <destFile>${jacoco.destfile}</destFile>
                            <append>true</append>
                            <propertyName>failsafeArgLine</propertyName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>post-integration-test</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>report-integration</goal>
                        </goals>
                        <configuration>
                            <dataFile>${jacoco.destfile}</dataFile>
                            <outputDirectory>${sonar.jacoco.reportPath}</outputDirectory>
                            <skip>${skip.failsafe.tests}</skip>
                        </configuration>
                    </execution>
                    <!-- Disabled until such time as code quality stops this tripping
                    <execution>
                        <id>default-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <dataFile>${jacoco.destfile}</dataFile>
                        </configuration>
                    </execution>
                    -->
                </executions>
            </plugin>
            ...

এবং বিল্ড বিভাগে

 <build>
     <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>

        <plugin>
            <!-- for unit test execution -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
        </plugin>
        <plugin>
            <!-- For integration test separation -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
        </plugin>
        <plugin>
            <!-- For code coverage -->
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
        </plugin>
        ....

এবং রিপোর্টিং বিভাগে

    <reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>${maven.surefire.report.plugin}</version>
            <configuration>
                <showSuccess>false</showSuccess>
                <alwaysGenerateFailsafeReport>true</alwaysGenerateFailsafeReport>
                <alwaysGenerateSurefireReport>true</alwaysGenerateSurefireReport>
                <aggregate>true</aggregate>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.plugin.version}</version>
            <configuration>
                <excludes>
                    <exclude>**/*.mar</exclude>
                    <exclude>${jacoco.excludePattern}</exclude>
                </excludes>
            </configuration>
        </plugin>
     </plugins>
  </reporting>

1
আমি দেখতে পাচ্ছি <append>true</append>যে prepare-agentবিভাগগুলির অধীনে আপনার কনফিগারেশন রয়েছে ...
স্টিয়ার্ট

জোর দেওয়া। অন্য উত্তর আমার মন্তব্য পড়ুন। এটি আমার জন্য অনুপস্থিত গুরুত্বপূর্ণ উপাদান ছিল, অন্য দস্তাবেজে পাওয়া যায় নি।
স্টিয়ার্ট

আপনি কি এই জন্য একটি গিথুব লিঙ্ক আছে? আমি ঠিক একই ধরণের কনফিগার করতে চাই
রোহিত কাসাত

@ রিত - না আমি না, কমপক্ষে কোনও সরকারী ভাণ্ডারে নেই।
মিষ্টিফা

এটি সোনার কিউব সংস্করণ 6.5 (বিল্ড 27846) এর সাথে খুব ভালভাবে কাজ করে ...: ডি কোড কভারেজটি সঠিকভাবে প্রদর্শিত হবে।
udoline

6

এটি সম্পাদন করার একটি উপায় আছে। ম্যাজিকটি হ'ল একটি সম্মিলিত জোকোকো.এক্সেক ফাইল তৈরি করা। Maven 3.3.1 এর সাথে এটি পাওয়ার সহজ উপায় রয়েছে is এখানে আমার প্রোফাইল:

<profile>
    <id>runSonar</id>
    <activation>
        <property>
            <name>runSonar</name>
            <value>true</value>
        </property>
    </activation>
    <properties>
        <sonar.language>java</sonar.language>
        <sonar.host.url>http://sonar.url</sonar.host.url>
        <sonar.login>tokenX</sonar.login>
        <sonar.jacoco.reportMissing.force.zero>true</sonar.jacoco.reportMissing.force.zero>
        <sonar.jacoco.reportPath>${jacoco.destFile}</sonar.jacoco.reportPath>
        <jacoco.destFile>${maven.multiModuleProjectDirectory}/target/jacoco_analysis/jacoco.exec</jacoco.destFile>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <append>true</append>
                            <destFile>${jacoco.destFile}</destFile>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>3.2</version>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.7.8</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</profile>

আপনি যদি এই প্রোফাইলটিকে আপনার পিতামাতার পোমে যোগ করেন এবং কল করেন mvn clean install sonar:sonar -DrunSonarতবে সম্পূর্ণ কভারেজ পাবেন।

যাদু এখানে maven.multiModuleProjectDirectory। এই ফোল্ডারটি সর্বদা সেই ফোল্ডার যেখানে আপনি আপনার মেভেন বিল্ড শুরু করেছিলেন।


এটি আমার পক্ষে কাজ করেছিল, অন্যান্য অনেকগুলি সমাধানের পরেও।
জিমসন ক্যাননথার জেমস

একমাত্র সমস্যা ছিল, ত্রুটির mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar -DrunSonarকারণে আমাকে কমান্ড দিয়ে সোনার চালাতে হয়েছিল A required class was missing while executing org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.1:sonar: org/sonar/batch/bootstrapper/IssueListener
জিমসন ক্যাননথার জেমস

1
এই যাদু ব্যবহার করবেন না। প্রদত্ত সম্পত্তি একটি বাস্তবায়ন বিশদ এবং এর উপর নির্ভর করা হবে না। - মাভেন বিকাশকারী দল
মাইকেল-ও

4

আমি নতুন সোনার সংস্করণগুলির জন্য আরেকটি সমাধান পেয়েছি যেখানে জ্যাকোকোর বাইনারি রিপোর্ট ফর্ম্যাট (* .exec) অবচয় করা হয়েছিল এবং পছন্দসই বিন্যাসটি এক্সএমএল (সোনারজভা 5.12 এবং উচ্চতর)। সমাধানটি খুব সহজ এবং এই বিষয়টির মূল তালিকাতে * .exec প্রতিবেদনের সাথে পূর্ববর্তী সমাধানের সাথে সমান: https://stackoverflow.com/a/15535970/4448263

ধরে নিচ্ছি যে আমাদের প্রকল্পের কাঠামোটি হ'ল:

moduleC - aggregate project's pom
  |- moduleA - some classes without tests
  |- moduleB - some classes depending from moduleA and tests for classes in both modules: moduleA and moduleB

সমষ্টিগত প্রকল্পের পমের জন্য আপনাকে মাভেন বিল্ড প্লাগইন কনফিগারেশনটি দরকার:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.5</version>
    <executions>
        <execution>
            <id>prepare-and-report</id>
            <goals>
                <goal>prepare-agent</goal>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>report-aggregate</id>
            <phase>verify</phase>
            <goals>
                <goal>report-aggregate</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.basedir}/../target/site/jacoco-aggregate</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

তারপরে মাভেনের সাহায্যে প্রকল্পটি তৈরি করুন:

mvn clean verify

এবং সোনারের জন্য আপনার প্রশাসনের জিইআইতে সম্পত্তি নির্ধারণ করা উচিত:

sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml,../target/site/jacoco-aggregate/jacoco.xml

বা কমান্ড লাইন ব্যবহার করে:

mvn sonar:sonar -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml,../target/site/jacoco-aggregate/jacoco.xml

বিবরণ

এটি ডিফল্ট ডিরেক্টরি প্রতিটি মডিউলের জন্য বাইনারি রিপোর্ট তৈরি করে: target/jacoco.exec। তারপরে ডিফল্ট ডিরেক্টরি প্রতিটি মডিউল জন্য XML প্রতিবেদন তৈরি করে: target/site/jacoco/jacoco.xml। তারপরে কাস্টম ডিরেক্টরিতে প্রতিটি মডিউলের জন্য একটি সামগ্রিক প্রতিবেদন তৈরি করে যা প্রতিটি মডিউলের ${project.basedir}/../target/site/jacoco-aggregate/জন্য প্যারেন্ট ডিরেক্টরি সম্পর্কিত। মডিউলএ এবং মডিউলবি এর জন্য এটি সাধারণ পথ হবে moduleC/target/site/jacoco-aggregate/

মডিউলবি যেমন মডিউলএ-র উপর নির্ভরশীল, মডিউলবি সর্বশেষে নির্মিত হবে এবং এর রিপোর্ট সোনারে একটি এবং বি মডিউল উভয়ের জন্য সামগ্রিক কভারেজ রিপোর্ট হিসাবে ব্যবহৃত হবে

সামগ্রিক প্রতিবেদন ছাড়াও, আমাদের একটি সাধারণ মডিউল প্রতিবেদন প্রয়োজন কারণ জ্যাকোকো সামগ্রিক প্রতিবেদনে কেবল নির্ভরতার জন্য কভারেজ ডেটা থাকে।

একসাথে, এই দুই ধরণের প্রতিবেদন সোনার জন্য সম্পূর্ণ কভারেজ ডেটা সরবরাহ করে।

একটি সামান্য বাধা আছে: আপনি প্রকল্পের মূল ডিরেক্টরিতে একটি প্রতিবেদন লিখতে সক্ষম হবেন (অনুমতি থাকা উচিত)। অথবা আপনি jacoco.skip=trueমূল প্রকল্পের pom.xML (মডিউলসি) এবং jacoco.skip=falseক্লাস এবং পরীক্ষা (মডিউলএ এবং মডিউলবি) সহ মডিউলগুলিতে সম্পত্তি সেট করতে পারেন ।


2
    <sonar.language>java</sonar.language>
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.jacoco.reportPath>${user.dir}/target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.jacoco.itReportPath>${user.dir}/target/jacoco-it.exec</sonar.jacoco.itReportPath>
    <sonar.exclusions>
        file:**/target/generated-sources/**,
        file:**/target/generated-test-sources/**,
        file:**/target/test-classes/**,
        file:**/model/*.java,
        file:**/*Config.java,
        file:**/*App.java
    </sonar.exclusions>

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <destFile>${sonar.jacoco.reportPath}</destFile>
                            <append>true</append>
                            <propertyName>surefire.argLine</propertyName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-prepare-agent-integration</id>
                        <goals>
                            <goal>prepare-agent-integration</goal>
                        </goals>
                        <configuration>
                            <destFile>${sonar.jacoco.itReportPath}</destFile>
                            <append>true</append>
                            <propertyName>failsafe.argLine</propertyName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-report</id>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-report-integration</id>
                        <goals>
                            <goal>report-integration</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>             

2

হিসাবে Sonars sonar.jacoco.reportPath, sonar.jacoco.itReportPathএবং sonar.jacoco.reportPathsসব হয়েছে অবচিত , আপনি ব্যবহার করা উচিত sonar.coverage.jacoco.xmlReportPathsএখন। আপনি সোনার এবং জ্যাকোকোর সাথে একটি মাল্টি মডিউল মাভেন প্রকল্পটি কনফিগার করতে চাইলে এর কিছুটা প্রভাবও রয়েছে।

@ লোনজাক যেমন উল্লেখ করেছেন , সোনার ০.7..7 থেকে আপনি সোনার্স প্রতিবেদন বাড়ানোর লক্ষ্যটি ব্যবহার করতে পারেন। কেবলমাত্র প্যারেন্ট পমকে নিম্নলিখিত নির্ভরতাটি আপনার মধ্যে রেখেছেন:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.5</version>
    <executions>
        <execution>
            <id>report</id>
            <goals>
                <goal>report-aggregate</goal>
            </goals>
            <phase>verify</phase>
        </execution>
    </executions>
</plugin>

যেহেতু জ্যাকোকো-মাভেন-প্লাগইনটির বর্তমান সংস্করণগুলি এক্সএমএল-প্রতিবেদনের সাথে সামঞ্জস্যপূর্ণ, তাই এটি নিজস্ব টার্গেট ফোল্ডারে প্রতিটি মডিউলটির জন্য একটি jacoco.xmlফাইল / জ্যাকো-অগ্রিগ্রেট ফোল্ডার যুক্ত করে যা একটি ফাইলযুক্ত ।

সোনারকে সমস্ত মডিউল একত্রিত করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

mvn -Dsonar.coverage.jacoco.xmlReportPaths=full-path-to-module1/target/site/jacoco-aggregate/jacoco.xml,module2...,module3... clean verify sonar:sonar

আমার উত্তরটি সংক্ষিপ্ত এবং যথাযথ রাখতে, আমি নির্ভরতা maven-surefire-pluginএবং maven-failsafe-pluginনির্ভরতাগুলি উল্লেখ করিনি । অন্য কোনও কনফিগারেশন ছাড়াই আপনি এগুলি যুক্ত করতে পারেন:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.22.2</version>
    <executions>
        <execution>
        <id>integration-test</id>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
    </executions>
</plugin>

1

আপনি নামক একটি পিপীলিকা টাস্ক কল করতে পারেন একত্রীকরণ (* .exec) একসঙ্গে একই ফাইলের সব কভারেজ ফাইল করা, ম্যাভেন উপর।

আপনি যদি ইউনিট পরীক্ষা চালাচ্ছেন তবে প্রস্তুতি প্যাকেজ পর্বটি ব্যবহার করুন , আপনি যদি ইন্টিগ্রেশন পরীক্ষা পরিচালনা করেন তবে পোস্ট-ইন্টিগ্রেশন-পরীক্ষা ব্যবহার করুন

মাভেন প্রজেক্টে কল জ্যাকোকো পিঁপড়া টাস্কের এই সাইটের উদাহরণ রয়েছে

আপনি সোনারে এই মার্জ করা ফাইলটি ব্যবহার করতে পারেন।


0

ইউনিট-টেস্টিং এবং ইন্টিগ্রেশন-পরীক্ষার জন্য আপনি মেভেন-শিফারফায়ার-প্লাগইন এবং ম্যাভেন-ফেইলসেফ-প্লাগইনকে সীমাবদ্ধ অন্তর্ভুক্ত / বাদ দিয়ে ব্যবহার করতে পারেন। সোনার / জ্যাকোকোর সংস্পর্শে আসার সময় আমি সিডিআইয়ের সাথে খেলছিলাম, সুতরাং আমি এই প্রকল্পে শেষ হয়েছি:

https://github.com/FibreFoX/cdi-sessionscoped-login/

হতে পারে এটি আপনাকে কিছুটা সহায়তা করে। আমার pom.xML এ আমি নির্দিষ্ট পরীক্ষামূলক-প্লাগইনগুলির কনফিগারেশন-বিভাগে আরগলাইন-বিকল্পটি সেট করে "-জাভাজনেন্ট" অন্তর্নিহিত ব্যবহার করি। MAVEN প্রকল্পগুলিতে এএনটি স্পষ্টভাবে ব্যবহার করা এমন একটি জিনিস যা আমি চেষ্টা করে দেখব না, এটি আমার পক্ষে দুটি পৃথিবীর অনেকটা মিশ্রণের জন্য।

আমার কাছে কেবল একটি একক-মডিউল মাভেন প্রকল্প রয়েছে তবে সম্ভবত এটি আপনাকে আপনার কাজের সাথে সামঞ্জস্য করতে সহায়তা করে।

দ্রষ্টব্য: সম্ভবত সমস্ত ম্যাভেন-প্লাগইন up2date নয়, সম্ভবত কিছু সমস্যা পরবর্তী সংস্করণগুলিতে স্থির হয়েছে


এর জন্য ধন্যবাদ; আমি একবার দেখে নেব এবং এটি কীভাবে কার্যকর হয় তা আপনাকে জানাব। যদিও এই সপ্তাহে হতে পারে না :)
স্টুয়ার্ট

0

এই নমুনাটি আমার পক্ষে খুব ভাল কাজ করে:

<plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.2</version>
            <executions>
                <execution>
                    <id>pre-unit-test</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                    <configuration>
                        <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                        <propertyName>surefireArgLine</propertyName>
                    </configuration>
                </execution>
                <execution>
                    <id>pre-integration-test</id>
                    <goals>
                        <goal>prepare-agent-integration</goal>
                    </goals>
                    <configuration>
                        <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
                        <!--<excludes>
                            <exclude>com.asimio.demo.rest</exclude>
                            <exclude>com.asimio.demo.service</exclude>
                        </excludes>-->
                        <propertyName>testArgLine</propertyName>
                    </configuration>
                </execution>
                <execution>
                    <id>post-integration-test</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
                        <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
                    </configuration>
                </execution>
                <execution>
                    <id>post-unit-test</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                        <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                    </configuration>
                </execution>
                <execution>
                    <id>merge-results</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>merge</goal>
                    </goals>
                    <configuration>
                        <fileSets>
                            <fileSet>
                                <directory>${project.build.directory}/coverage-reports</directory>
                                <includes>
                                    <include>*.exec</include>
                                </includes>
                            </fileSet>
                        </fileSets>
                        <destFile>${project.build.directory}/coverage-reports/aggregate.exec</destFile>
                    </configuration>
                </execution>
                <execution>
                    <id>post-merge-report</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <dataFile>${project.build.directory}/coverage-reports/aggregate.exec</dataFile>
                        <outputDirectory>${project.reporting.outputDirectory}/jacoco-aggregate</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <argLine>${surefireArgLine}</argLine>
                <!--<skipTests>${skip.unit.tests}</skipTests>-->
                <includes>
                    <include>**/*Test.java</include>
                    <!--<include>**/*MT.java</include>
                    <include>**/*Test.java</include>-->
                </includes>
            <!--    <skipTests>${skipUTMTs}</skipTests>-->
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.12.4</version>
            <configuration>
                <!--<skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>-->
                <argLine>${testArgLine}</argLine>
                <includes>
                    <include>**/*IT.java</include>
                </includes>
                <!--<excludes>
                    <exclude>**/*UT*.java</exclude>
                </excludes>-->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

দয়া করে আপনার উত্তরের জন্য কিছু ব্যাখ্যা সরবরাহ করুন
মিশ্কস

@ মিশসএক্স ব্যাখ্যা করার জন্য একটি দুর্দান্ত নিবন্ধ: natritmeyer.com/howto/…
SerhatTopkaya
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.