クローバーとソナーのターゲットを備えた 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 回実行されるようにする方法がわかりません。