2011-08-27 8 views
5

मैं निम्नलिखित सोनार चींटी लक्ष्य को परिभाषित किया है:सोनार को टेस्ट आंकड़ों को निर्यात करने के लिए कैसे प्राप्त करें?

<target name='sonar'> 
    <property name='sonar.sources' value='${src.dir}'/> 
    <property name='sonar.tests' value='${test.src.dir}'/> 
    <property name='sonar.binaries' value='build/classes'/> 
    <path id='jars'> 
     <fileset dir='${env.JAVA_HOME}/jre/lib' includes='*.jar'/> 
     <fileset dir='build/lib/test' includes='*.jar'/> 
    </path> 
    <pathconvert property='sonar.libraries' refid='jars' pathsep=','/> 

    <exec executable='p4' outputproperty='p4.P4CLIENT'> 
     <arg value='set'/> 
     <arg value='P4CLIENT'/> 
    </exec> 
    <propertyregex 
      property='p4client' 
      input='${p4.P4CLIENT}' 
      regexp='P4CLIENT=([^ ]+) *.*' 
      replace='\1'/> 
    <propertyregex 
      property='sonar.timestamp' 
      input='${build.time}' 
      regexp='_' 
      replace='T'/> 
    <sonar:sonar key='com.netflix:${module.name}' version='${p4client}@${sonar.timestamp}' xmlns:sonar='antlib:org.sonar.ant'/> 

    <property name='sonar.dynamicAnalysis' value='reuseReports'/> 
    <property name='sonar.emma.reportPath' value='${coverage.dir}'/> 
</target> 

जब मैं 'चींटी सोनार' चलाने के लिए और अपने ब्राउज़र में सोनार को लाने, मैं src निर्देशिका में कक्षाओं के बारे में जानकारी देखते हैं, लेकिन में सामग्री के बारे में कुछ भी नहीं है परीक्षण निर्देशिका।

अगर मैं sonar.sources में $ {test.src.dir} जोड़ता हूं और सोनार.tests सेट नहीं करता हूं, तो मुझे टेस्ट क्लास के बारे में कुछ जानकारी दिखाई देती है, लेकिन सोनार अभी भी 0 टेस्ट सफलताओं की रिपोर्ट करता है।

मैं इसे कैसे प्राप्त करूं ताकि मैं प्रत्येक परीक्षण विधि और उनके आंकड़ों पर ड्रिल कर सकूं?

उत्तर

2

संपत्ति 'sonar.surefire.reportsPath' को सोनार लक्ष्य की परिभाषा से पहले परिभाषित करने की आवश्यकता है।

निम्नलिखित परिभाषा (हालांकि यह अभी भी नहीं कवरेज की जानकारी निर्यात है) परीक्षण की जानकारी निर्यात किया जाता है:

<property name='sonar.surefire.reportsPath' value='${test.dir}'/> 

<property name='sonar.dynamicAnalysis' value='reuseReports'/> 
<property name='sonar.emma.reportPath' value='${coverage.report.dir}'/> 

<target name='sonar'> 
    <property name='sonar.sources' value='${src.dir}'/> 
    <property name='sonar.tests' value='${test.src.dir}'/> 
    <property name='sonar.binaries' value='${build.dir}'/> 
    <path id='jars'> 
     <fileset dir='${env.JAVA_HOME}/jre/lib' includes='*.jar'/> 
     <fileset dir='${ivy.lib.dir}/test' includes='*.jar'/> 
    </path> 
    <pathconvert property='sonar.libraries' refid='jars' pathsep=','/> 

    <exec executable='p4' outputproperty='p4.P4CLIENT'> 
     <arg value='set'/> 
     <arg value='P4CLIENT'/> 
    </exec> 
    <propertyregex 
      property='p4client' 
      input='${p4.P4CLIENT}' 
      regexp='P4CLIENT=([^ ]+) *.*' 
      replace='\1'/> 
    <propertyregex 
      property='sonar.timestamp' 
      input='${build.time}' 
      regexp='_' 
      replace='T'/> 

    <sonar:sonar key='com.netflix:${module.name}' version='${p4client}@${sonar.timestamp}' xmlns:sonar='antlib:org.sonar.ant'/> 
</target> 
+0

हाय मुझे एक [समान समस्या] है (http://stackoverflow.com/questions/21267948/sonarqube-test-coverage-report-for-android-built-with-ant) लेकिन काफी समान नहीं है। .. आप लोग कैसे .emma फ़ाइल निकाल रहे हैं? – JaKXz

+0

हमने वास्तव में सोनार का उपयोग बंद कर दिया है और हमारे स्वयं के निर्माण डेटा भंडार का निर्माण करेगा। –

6

किसी और को चलाता है कि इस समस्या का सामना करते हैं, मैं अंत में हमारे एम्मा कोड कवरेज पर रिपोर्ट करने के सोनार मिला लिए। पहली समस्या यह थी कि एम्मा प्लगइन सोनार के संस्करण के साथ नहीं आया था (3.1.1)। मुझे download it करना था और इसे extensions/plugins सोनार की निर्देशिका में स्थापित करना था और इसे पुनरारंभ करना था।

तब मैं अपने build.xml में निम्नलिखित गुण सेट करने के लिए किया था:

[sonar:sonar] 13:41:49.705 WARN  org.sonar.INFO - No coverage (*.ec) file found in /my/local/path 
[sonar:sonar] 13:41:49.708 WARN  org.sonar.INFO - No metadata (*.em) file found in /my/local/path 

कुछ करने के बाद:

<property name="sonar.core.codeCoveragePlugin" value="emma" /> 
<property name="sonar.emma.reportPath" value="${coverage.dir}" /> 

इस के बाद, मैं कम से कम सोनार चींटी कार्य चलाने के बाद निम्नलिखित उत्पादन देखा खुदाई, मैंने पाया कि Sonar Emma plugin के अंदर, यह एक .ec (कवरेज) फ़ाइल और एक .em (मेटाडेटा) फ़ाइल देखने के लिए हार्ड-कोड किया गया है। दुर्भाग्यवश, मेरी कवरेज फ़ाइल में मेरी मेटाडेटा फ़ाइल के रूप में एक .emma एक्सटेंशन था और मैं उनका नाम बदलने में असमर्थ था क्योंकि यह अन्य कार्यक्षमता को तोड़ देगा। तो मैंने नामांकन मानक से मेल खाने के लिए फाइलों की प्रतिलिपि बनाने के लिए निम्न चींटी कार्य लिखा है, जो सोनार एम्मा प्लगइन की अपेक्षा करता है।

<target name="createEmmaFilesWithSonarNamingStandard" depends="defineAntContribTasks"> 
    <if> 
     <available file="${coverage.dir}/metadata.emma" /> 
     <then> 
      <copyfile src="${coverage.dir}/metadata.emma" dest="${coverage.dir}/metadata.em" /> 
     </then> 
    </if> 
    <if> 
     <available file="${coverage.dir}/coverage.emma" /> 
     <then> 
      <copyfile src="${coverage.dir}/coverage.emma" dest="${coverage.dir}/coverage.ec" /> 
     </then> 
    </if> 
</target> 

यह फिर से चलाने के बाद, मैं एक नई समस्या में आए:

org.sonar.api.utils.SonarException: java.io.IOException: cannot read [/my/local/path/build/coverage/metadata.em]: created by another EMMA version [2.0.5312] 

कुछ और खुदाई के बाद, मैंने पाया कि सोनार एम्मा 1.0.1 प्लगइन एम्मा 2.0.5312 और के खिलाफ संकलित किया गया था Sonar Emma plugin पृष्ठ पर बताए गए एम्मा संस्करण 2.1.5320 के खिलाफ सोनार एम्मा 1.1 और 1.2.x।

मैंने एम्मा के 2.1.5320 संस्करण को डाउनलोड किया, मेरी एंटी lib निर्देशिका में emma.jar और emma_ant.jar दोनों को प्रतिस्थापित किया। एक साफ पुन: संकलन और परीक्षण के बाद, मैं सोनार चींटी कार्य को फिर से चलाने में सक्षम था और मेरा कोड कवरेज सोनार पर दिखाई देता है।

संबंधित मुद्दे