2013-05-17 12 views
10

Ich benutze Ant, Jacoco und Sonar. Wenn ich mein Build starte, sagt mir Sonar, dass "keine Informationen über die Abdeckung pro Test vorliegen." und das Echolot-Dashboard hat meine Coverage-Ergebnisse, aber ich kann nicht in sie hineingehen, um den Code zu sehen. Der von Jacoco generierte HTML-Bericht enthält jedoch einen Drilldown in den Code. Dies ist meine Deckung Aufgabe:
"Keine Informationen zur Abdeckung pro Test." von Sonar mit Jacoco Ant Build

<jacoco:coverage destfile="${coverage.output.file}" > 
     <junit printsummary="on" 
      errorProperty="test.failed" 
      failureProperty="test.failed" 
      haltonfailure="yes" 
      fork="true"> 
      <formatter type="brief" usefile="false" /> 
      <formatter type="xml" /> 
      <classpath> 
       <path refid="test.build.class.path"/> 
       <pathelement location="${test.bin.dir}"/>  
      </classpath> 
      <batchtest todir="${results.dir}"> 
       <fileset dir="${test.bin.dir}"> 
        <include name = "**/**/*Test.class"/> 
       </fileset> 
      </batchtest> 
     </junit> 
    </jacoco:coverage> 

    <jacoco:report> 
     <executiondata> 
      <file file="${coverage.output.file}"/> 
     </executiondata> 
     <structure name="${ant.project.name}"> 
      <classfiles> 
       <fileset dir="${bin.dir}"/> 
      </classfiles> 
      <sourcefiles encoding="UTF-8"> 
       <fileset dir="${src.dir}"/> 
      </sourcefiles> 
     </structure> 
     <html destdir="${coverage.results.dir}"/> 
    </jacoco:report> 
</target> 

Und mein Sonar Ziel sieht wie folgt aus:

<target name="sonar" depends = "run"> 
    <property name="sonar.jdbc.url" value="..." /> 
    <property name="sonar.jdbc.username" value="...r" /> 
    <property name="sonar.jdbc.password" value="..." /> 

    <property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" /> 
    <property name="sonar.projectName" value="${ant.project.name} (ant)" /> 
    <property name="sonar.projectVersion" value="1.0" /> 
    <property name="sonar.language" value="java" /> 
    <property name="sonar.sources" value="${src.dir}" /> 
    <property name="sonar.binaries" value="${bin.dir},${test.bin.dir}" /> 
    <property name="sonar.libraries" value="${lib.dir}/*.jar" />  

    <property name="sonar.dynamicAnalysis" value="reuseReports" /> 
    <property name="sonar.surefire.reportsPath" value="${results.dir}" /> 
    <property name="sonar.java.coveragePlugin" value="jacoco" /> 
    <property name="sonar.jacoco.reportPath" value="${coverage.output.file}" /> 

    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> 
     <classpath>   
      <fileset dir="${lib.dir}" includes="sonar-ant-task-2.0.jar"/> 
     </classpath> 
    </taskdef> 

    <sonar:sonar />  
</target> 

Weiß jemand, was ich vermisst?

Antwort

2

Es sieht so aus, als hätten Sie die Eigenschaft 'sonar.tests' nicht festgelegt, um Sonar mitzuteilen, wo sich der Quellcode Ihrer Komponententests befindet. Siehe http://docs.sonarqube.org/display/SONAR/Analysis+Parameters.

David RACODON | SonarSource

+2

Ich bestätige - in meinem Fall wurde dies eingestellt, um Quellen zu testen, während es auf die kompilierten Klassen zeigen sollte. –

+5

Ich habe versucht, die Eigenschaft sonar.tests hinzuzufügen, um sowohl auf Quellcode als auch auf Bytecode zu verweisen. Keine funktionierte. Ich bin immer noch damit ratlos. –

+0

Ich habe das gleiche Problem. Ich denke, dass dies ein Fehler mit der Ant-Aufgabe sein könnte, da ich dies mit Sonar Runner getan hatte und es funktionierte gut, aber die gleichen Eigenschaften in Ant scheitern. – rozner

2

Die Eigenschaft sonar.test sollte auf die Testklassen festgelegt werden. Wir haben folgendes in unserem maven pom. Für ANT tun Sie etwas ähnliches:

<profile> 
     <id>sonarprofile</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <sonar.host.url>....our host..../sonar.host.url> 
      <sonar.projectKey>....our key....</sonar.projectKey> 
      <sonar.projectName>${project.artifactId}</sonar.projectName> 
      <sonar.projectVersion>${project.version}</sonar.projectVersion> 
      <sonar.language>java</sonar.language> 
      <sonar.sources>src/main/java</sonar.sources> 
      <!-- sonar.tests>target/test-classes</sonar.tests --> 
      <!-- that is the default location for Maven projects and --> 
      <!-- this parameter can't actually be set in that case --> 
      <sonar.scm.provider>git</sonar.scm.provider> 
      <sonar.login>${SONAR_LOGIN}</sonar.login> 
      <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> 
      <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> 
      <sonar.jacoco.reportPath>${basedir}/target/coverage-reports/jacoco-unit.exec</sonar.jacoco.reportPath> 
     </properties> 
    </profile> 

Nebenbei bemerkt gibt es einige andere Eigenschaften in dieser verwendet:

  • ich ein SONAR-Token durch meine Sonar Benutzer generiert haben, anstatt Verwendung Login und Passwort
  • JaCoCo Abdeckung wird separat unter Verwendung der jacoco-maven-plugin generiert und die sonar.jacoco.reportPath ist eine Eigenschaft in diesem Plugin verwendet.

David Racodon Antwort (https://stackoverflow.com/a/16645108/1019307) war einmal richtig, aber in Mitte 2014 Sonarqube gestoppt, die Tests im Rahmen der Sonar Ausführung Ausführung (http://www.sonarqube.org/unit-test-execution-in-sonarqube/). Daher funktioniert das Zeigen auf die Testquelle nicht mehr.

+0

Es ist "sonar.tests", nicht "sonar.test" Außerdem: "Nicht kompatibel mit Maven, das den Test vom Standard-Speicherort für Java Maven-Projekte abruft." Siehe http://docs.sonarqube.org/display/SONAR/Analysis+Parameters –

+0

Ok, das ist ein Parameter falsch (obwohl es für mich funktioniert hat). Obwohl es eigentlich nicht falsch ist, sondern überflüssig. Ist das ein Grund zum Downvote? Ein einfacher Kommentar hätte mich dazu gebracht, meine Antwort zu aktualisieren. – HankCa

+1

Hallo @HankCa, Jetzt, wo Sie Ihre Antwort aktualisiert haben, habe ich den Downvote entfernt. Nimm keine einzelnen Stimmen ernst :-) –