Thomas Sundberg によるこの最近のブログ投稿には、maven cobertura プラグインを使用する代わりに、cobertura 呼び出しに ant を使用して問題を部分的に解決する方法が含まれています。
これは、特殊な pom.xml および build.xml ファイルを使用した次の基本的なアプローチに依存しています。
親 pom での典型的な maven コンパイルから始めます。これにより、子モジュール内のすべてのクラスがコンパイルされます。
mvn clean compile # maven-compile-plugin called for compiling
次に、すべてのモジュール クラスを計測します。
ant instrument # cobertura called for instrumentation
次に、cobertura をテスト依存関係として、インストルメント化されたクラスを使用して、テスト用に呼び出された maven-surefire-plugin を呼び出します。
mvn test
次に、カスタム レポート呼び出しを使用して、さまざまなモジュールからすべての結果を取り込みます。
ant report # cobertura called for reporting
ant build.xml ファイルの重要な要素は、すべてのモジュールを個別に計測し、結果をマージした後にすべてのモジュールについてレポートすることです。この関数は、彼の例のモジュールごとに呼び出す必要があります。
<target name="instrumentAModule">
<property name="classes.dir" value="target/classes"/>
<cobertura-instrument todir="./${module}/${classes.dir}">
<fileset dir="./${module}/target/classes">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>
</target>
次に、テストが完了した後、レポート フェーズで最初に、すべての異なるディレクトリからのすべての結果が新しい .ser ファイル (この例では sum.ser と呼ばれる) にマージされます。
<target name="report" depends="merge">
<property name="src.dir" value="src/main/java/"/>
<cobertura-report datafile="sum.ser"
format="html"
destdir="./target/report">
<!-- Add all modules that should be included below -->
<!-- fileset dir="./MODULE_NAME_TO_REPLACE/${src.dir}"/ -->
<fileset dir="./product/${src.dir}"/>
</cobertura-report>
</target>
<target name="merge">
<cobertura-merge datafile="sum.ser">
<fileset dir=".">
<include name="**/cobertura.ser"/>
</fileset>
</cobertura-merge>
</target>
antrunプラグインを使用してantコンポーネントをmavenに統合することは可能かもしれませんが、フェーズ/ライフサイクルに精通していないため、さまざまな呼び出しをどこに置くかを知ることができません.
これは、API モジュールで抽象テスト クラスを作成し、lib モジュールで実装を提供するので、私にとって非常に便利です。これまでのところ、cobertura と emma の両方がこの設計を処理できていないため、私のコード カバレッジは通常 0 または 1 桁です。