声纳蚂蚁任务或哈德森整合覆盖报告

时间:2011-10-26 08:16:02

标签: ant sonarqube cobertura

早上好,我有一个关于cobertura报告整合在声纳中的问题。 我试过两种方式:从哈德森和蚂蚁任务。 如果我使用哈德森配置声纳整合,cobertura报告很好地集成到我的声纳仪表板,但我有一些警告,如

Java bytecode scan... 
[WARN]  Class 'javax/mail/Folder' is not accessible through the ClassLoader.
[WARN]  Class 'javax/mail/Folder' is not accessible through the ClassLoader.
[WARN]  Class 'javax/mail/Folder' is not accessible through the ClassLoader.
[WARN]  Class 'javax/mail/Folder' is not accessible through the ClassLoader.
[WARN]  Class 'com/sun/mail/imap/IMAPFolder' is not accessible through the ClassLoader.

但是,我的cobertura报告很好地整合了:

 [INFO]  Sensor CoberturaSensor...
 [INFO]  parsing C:\hudson\jobs\Client Mail\workspace\cobertura\reports\coverage.xml
 [INFO]  Sensor CoberturaSensor done: 1218 ms

所以,我决定使用ant任务,这样我可以管理我的图书馆,这是我的蚂蚁任务:

 <target name="sonar" depends="cover-report">
<!-- The workDir directory is used by Sonar to store temporary files -->
<sonar:sonar workDir="./" key="fr.simscorps:client.mail" version="0.1-SNAPSHOT" xmlns:sonar="antlib:org.sonar.ant">
<property key="sonar.host.url" value="http://172.30.3.55:1234/sonar/" />
  <!-- source directories (required) -->
  <sources>
    <path location="./src" />
  </sources>

  <!-- list of properties (optional) -->
  <property key="sonar.dynamicAnalysis" value="reuseReports" />
  <property key="sonar.projectName" value="client mail" />
  <property key="sonar.java.source" value="1.5" />
  <property key="sonar.projectVersion" value="0.1-SNAPSHOT" /> 
  <property key="sonar.phase" value="generate-sources"/>
  <property key="sonar.cobertura.reportsPath" value="${reports.xml.dir}/coverage.xml"/>
  <property key="sonar.surefire.reportsPath" value="${reports.xml.dir}/TESTS-test.TestSuiteClientMail.xml" />



  <!-- test source directories (optional) -->
  <tests>
    <path location="./test" />
  </tests>

  <!-- binaries directories, which contain for example the compiled Java bytecode (optional) -->
  <binaries>
    <path location="./bin" />
  </binaries>

  <!-- path to libraries (optional). These libraries are for example used by the Java Findbugs plugin -->
  <libraries>
    <path location="./lib/activation.jar" />
    <path location="./lib/deltasync.jar" />
    <path location="./lib/jaybird_full_2_1_6.jar" />
    <path location="./lib/junit.jar" />
    <path location="./lib/mail.jar" />
    <path location="./lib/libdeltasync/apache-mime4j-0.5.jar"/>
    <path location="./lib/libdeltasync/commons-codec-1.5.jar"/>
    <path location="./lib/libdeltasync/commons-codec-1.5-javadoc.jar"/>
    <path location="./lib/libdeltasync/commons-codec-1.5-sources.jar"/>
    <path location="./lib/libdeltasync/commons-logging-1.1.1.jar"/>
    <path location="./lib/libdeltasync/httpclient-4.1.1.jar"/>
    <path location="./lib/libdeltasync/httpclient-cache-4.1.1.jar"/>
    <path location="./lib/libdeltasync/httpcore-4.1.jar"/>
    <path location="./lib/libdeltasync/httpmime-4.1.1.jar"/>
    <path location="./lib/libdeltasync/logback-classic-0.9.29.jar"/>
    <path location="./lib/libdeltasync/logback-classic-0.9.29-sources.jar"/>
    <path location="./lib/libdeltasync/logback-core-0.9.29.jar"/>
    <path location="./lib/libdeltasync/logback-core-0.9.29-sources.jar"/>
    <path location="./lib/libdeltasync/slf4j-api-1.6.1.jar"/>
    <path location="./lib/libdeltasync/slf4j-api-1.6.1-sources.jar"/>
  </libraries>
</sonar:sonar>
</target>

我的报告生成得很好(约700ko),在哈德森的日志中,我看到了cobertura传感器,但就像他没有做任何事情一样:

[sonar:sonar] [INFO]  Sensor CoberturaSensor...
[sonar:sonar] [INFO]  Sensor CoberturaSensor done: 0 ms

这里,我的另一个ant任务依赖:

 <property name="junit.output.dir" value="junit"/>
<property name="instrumented.dir" value="cobertura/instrumented"/>
<property name="classes.dir" value="bin"/>
<property name="jars.dir" value="lib"/>
<property name="test.dir" value="test"/>
<property name="cobertura.dir" value="${jars.dir}/cobertura"/>
<property name="reports.xml.dir" value="cobertura/reports"/>
<property name="cob.ser.file" value="cobertura.ser" />

 <!-- Define the Sonar task if this hasn't been done in a common script -->
   <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
   <classpath path="C:\hudson\tools\my_ant\lib" />
   </taskdef>

<path id="cobertura.classpath">
    <fileset dir="${cobertura.dir}">
        <include name="cobertura.jar" />
        <include name="lib/**/*.jar" />
    </fileset>
    <fileset dir="${jars.dir}">
        <include name="**/*.jar"/>
    </fileset>
</path>

<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
<target name="clean" >
    <delete dir="${instrumented.dir}" />
    <delete dir="${reports.xml.dir}" />
    <delete file="${cob.ser.file}" />
</target>

<target name="prepare" depends="clean">
        <mkdir dir="${instrumented.dir}" />
        <mkdir dir="${reports.xml.dir}" />
</target>
<target name="instrument" depends="prepare">
    <cobertura-instrument todir="${instrumented.dir}">
            <ignore regex="org.apache.log4j.*" />
            <fileset dir="${classes.dir}">
                <include name="**/*.class" />
                <exclude name="**/*Test.class" />
            </fileset>

        </cobertura-instrument>
</target>



<target name="testsuite" depends="instrument">
    <junit fork="yes" dir="${test.dir}" failureProperty="test.failed"  printsummary="withOutAndErr">
            <!--
                Specify the name of the coverage data file to use.
                The value specified below is the default.
            -->
            <sysproperty key="net.sourceforge.cobertura.datafile"
                file="${basedir}/cobertura.ser" />
            <!--
                Note the classpath order: instrumented classes are before the
                original (uninstrumented) classes.  This is important.
            -->
            <classpath location="${instrumented.dir}" />
            <classpath location="${classes.dir}" />

            <!--
                The instrumented classes reference classes used by the
                Cobertura runtime, so Cobertura and its dependencies
                must be on your classpath.
            -->
            <classpath refid="cobertura.classpath" />

            <formatter type="xml" />
            <test name="test.TestSuiteClientMail" todir="${reports.xml.dir}" />

            <!--<batchtest todir="${reports.xml.dir}" unless="testcase">
                <fileset dir="${test.dir}">
                    <include name="**/*Test*.java" />
                </fileset>
            </batchtest>-->
        </junit>
</target>

<target name="cover-report" depends="testsuite">
    <cobertura-report format="xml" destdir="${reports.xml.dir}" srcdir="${test.dir}" />
</target>

有没有人有想法?

2 个答案:

答案 0 :(得分:1)

[ANSWER] 好吧,我的错,问题在于我使用的语法:它是

<property key="sonar.cobertura.reportPath" value="${reports.xml.dir}/coverage.xml"/> 并不是 <property key="sonar.cobertura.reportsPath" value="${reports.xml.dir}/coverage.xml"/>我们可以看到here 抱歉

答案 1 :(得分:1)

至于你正在获得的Class Loader错误,我通过确保我的二进制文件中的路径来摆脱我的错误。 libraries属性是从我的项目的根目录。

<property name="sonar.libraries" value="./Module/resources/web/WEB-INF/lib" />

而不是

<property name="sonar.libraries" value="resources/web/WEB-INF/lib" />

这给出了类加载器错误。希望这有助于某人。花了几天时间搞清楚了!