0

クローバーとソナーのターゲットを備えた ANT ビルドがあります。サンプル コマンドは次のとおりです。

ant clover.all sonar_all

現在、私は

 <clover-setup initstring="${clover.db.file}">
      <fileset dir="${src.dir}">
 ...

target を使用して、クローバー インストルメンテーションのソース ディレクトリを設定します。テストが実行され、期待どおりにクローバー レポートが表示されます。私のソナーターゲット

  <target name="sonar_all">
    <pathconvert pathsep="," property="echo.path.compile" refid="core.class.path"/>
    <property name="sonar.libraries" value="${echo.path.compile}"/>
    <property name="sonar.sources" value="${src.dir}"/>
    <property name="sonar.projectName" value="Touchpoint"/>
    <property name="sonar.binaries" value="${build.classes.dir}"/>
    <property name="sonar.tests" value=""/>
    <property name="sonar.host.url" value="${sonar.host.url}"/>
    <property name="sonar.jdbc.url" value="${sonar.jdbc.url}"/>
    <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="sonar.jdbc.username" value="${sonar.jdbc.username}"/>
    <property name="sonar.jdbc.password" value="${sonar.jdbc.password}"/>
    <property name="sonar.exclusions" value=""/>
    <property name="sonar.dynamicAnalysis" value="reuseReports"/>
    <property name="sonar.surefire.reportsPath" value="${build.dir}/utest"/>
    <property name="sonar.clover.reportPath" value="${build.dir}/clover/report/clover.xml"/>
    <property name="sonar.java.source" value="1.6"/>
    <property name="sonar.java.target" value="1.6"/>
    <sonar:sonar key="xx" version="xx" xmlns:sonar="antlib:org.sonar.ant"/>
  </target>

も正常に動作しますが、元のソース コードではなく、clover インストルメンテーション コードが処理されているようです。clover インストルメンテーション コードが findbugs で複数の違反を引き起こすため、findbugs レポートで問題が発生します。私のソナー測定基準は、壁から外れています。現在、回避策として、クローバー用とソナー用の 2 つの CI ビルドがありますが、コード カバレッジ メトリックとソナーの詳細を 1 つで取得することはできません。

clover-instr ターゲットを使用して、インストルメント化されたコードが別のディレクトリに配置されるようにしようとしましたが、コンパイルされたコードが単一のクラス ディレクトリに生成されるため、同じ問題が発生します。これを回避するために、他の開発者がどのような戦略を使用したのか疑問に思っています。

最低レベルでは、クローバー コンパイラを使用する必要があることを ant コンパイル ターゲットに示すために clover.all ターゲットによって設定されるプロパティ (つまり、-Dclover.useCompile=true|false) はありますか? デフォルトの clover.all ターゲットを実行してから、ソナー ターゲットでインストルメント化されたソース ファイルとクラス ファイルを削除し、clover オプションを指定せずに再生成して、デフォルトのソナー ターゲットを実行します。

 ant clover.all clover_off sonar_all

編集 1: Clover、Ant、および Findbugsでこの項目が見つかった場合、ANT スクリプト内で 2 回コンパイルすることをお勧めします。Ant ビルドは一度だけプロパティをロードするので、ビルドの途中でプロパティを切り替えて、コンパイル タスクが 2 回実行されるようにする方法がわかりません。

4

1 に答える 1

0

ここでの基本的な問題は、clover によって生成されたソース コードとクラスがソナーにとって頭痛の種になることですが、ant タスクを介して生成パスを分離することはできません。私のハッキングされた解決策は、すべてのクラス ファイルをポスト クローバー フェーズからソナー ターゲットの先頭にある新しいフォルダーにコピーし、名前に文字列 "$__CLR" が含まれていると仮定してクローバー クラスを削除することです。次に、ソナーに、元のクラス セットを使用してメトリクスを生成するように指示します。

<target name="sonar">

   <delete dir="${build.dir}/sonarclasses"/>
   <mkdir dir="${build.dir}/sonarclasses/com"/>
   <copy todir="${build.dir}/sonarclasses/com" verbose="true" failonerror="false">
       <fileset dir="${build.classes.dir}/com" excludes="com/**/*$__CLR*.class"/>
   </copy>

   <pathconvert pathsep="," property="echo.path.compile" refid="core.class.path"/>
   <property name="sonar.libraries" value="${echo.path.compile}"/>
   <property name="sonar.sources" value="${src.dir}"/>
   <property name="sonar.projectName" value="Touchpoint"/>
   <property name="sonar.binaries" value="${build.dir}/sonarclasses"/>
   <property name="sonar.tests" value=""/>
   <property name="sonar.host.url" value="${sonar.host.url}"/>
   <property name="sonar.jdbc.url" value="${sonar.jdbc.url}"/>
   <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver"/>
   <property name="sonar.jdbc.username" value="${sonar.jdbc.username}"/>
   <property name="sonar.jdbc.password" value="${sonar.jdbc.password}"/>
   <property name="sonar.exclusions" value=""/>
   <property name="sonar.dynamicAnalysis" value="reuseReports"/>
   <property name="sonar.surefire.reportsPath" value="${build.dir}/utest"/>
   <property name="sonar.clover.reportPath" value="${build.dir}/clover/report/clover.xml"/>
   <property name="sonar.java.source" value="1.6"/>
   <property name="sonar.java.target" value="1.6"/>
   <!--<property name="sonar.findbugs.reportPath" value="${build.dir}/findbugs/findbugs.xml"/>-->
   <sonar:sonar
于 2011-10-18T15:25:30.690 に答える