[解決済み] マルチモジュールのMaven + Sonar + JaCoCoがマージされたカバレッジレポートを提供するように設定する方法は?
質問
この件に関しては、インターネットをくまなく検索してみました。多くの中途半端な答えがあり、次のようなMavenプロパティに関係しています。
${sonar.jacoco.reportPath}
または
org.jacoco:jacoco-maven-plugin:prepare-agent
または設定
maven-surefire-plugin
argLine
と
-javaagent
.
なぜか、これらの回答は、単独でも、組み合わせても、私が求めているものが出てきません。 カバレッジレポートでは、そのクラスが DAO で使用されるエンティティなど、より上位のテストで使用されている場合、そのクラスがそれ自身のモジュール内のテストでは完全にカバーされていなくても、カバーされていると表示されます。
これを実現するための決定的なコンフィグはどこかにあるのでしょうか、お願いします。
解決方法は?
私も同じ状況でした。多くの人が同じ問題を抱えているようですが、誰もそれを解決する方法を完全に説明することを気にしないので、インターネット上に散らばる半分の答えは非常に迷惑なものでした。
その Sonarドキュメント を参照してください。 GitHubプロジェクトとその例 が参考になります。これを解決するために私が行ったのは、統合テストのロジックを通常のユニットテストに適用することでした(適切なユニットテストはサブモジュールに固有であるべきですが、これは常にそうとは限りません)。
親であるpom.xmlに、以下のプロパティを追加します。
<properties>
<!-- Sonar -->
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.language>java</sonar.language>
</properties>
これは、Sonarが同じ場所(親プロジェクト内のターゲットフォルダ)にあるすべてのサブモジュールのユニットテストレポートをピックアップするようにします。また、Sonarは独自にレポートを作成するのではなく、手動で実行したレポートを再利用するように指示します。jacoco-maven-pluginを親pomのbuild/plugins内に配置し、すべてのサブモジュールで実行するようにするだけです。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.0.201210061924</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
destFile
は、レポートファイルをSonarが探す場所に配置し
append
は、ファイルを上書きするのではなく、ファイルに追加するようにします。これにより、すべてのサブモジュールのJaCoCoレポートが同じファイルにまとめられます。
Sonarはそのファイルを各サブモジュールについて調べます。これは、上記で指定したものであり、Sonarの複数モジュールファイルのユニットテスト結果を結合したものを提供します。
関連
-
Mavenパッケージングエラー:パッケージorg.junitが存在しない
-
起動時の子コンテナの処理に失敗したエラー
-
コンパイルに失敗しました。Error: シンボルが見つかりません
-
CoreException: ビルドプランを計算できませんでした。プラグイン org.apache.maven.plugins:maven-compiler-plugin
-
[解決済み] 複数モジュールのMavenプロジェクトでモジュールのバージョン番号を更新する
-
[解決済み】Mavenでエンコーディングを設定する方法は?
-
[解決済み] 親POMで定義されたMavenプラグインを無効化する
-
[解決済み] Maven - テストを実行せずにコンパイルする方法は?
-
[解決済み] プロキシ経由でMavenを使用するにはどうすればよいですか?
-
[解決済み] Maven Jacoco 設定 - レポートからクラス/パッケージを除外することができません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗しました。
-
Jenkinsで、mavenを使用してパッケージxxxが存在しない問題が解決される
-
[解決済み] MavenにおけるdependencyManagementとdependenciesの相違点
-
[解決済み] Mavenのゴールとフェーズ、その違いは何ですか?
-
Tomcat はエラー org.apache.catalina.LifecycleException を報告します。コンポーネント[StandardEngine[Catalina]]の起動に失敗しました。
-
[解決済み】mavenのダウンロードの進捗状況表示を無効にする
-
[解決済み] Mavenビルド時のサブモジュールのスキップ
-
[解決済み] Mavenで単体テストを禁止し、統合テストを許可する
-
[解決済み] Maven - テストを実行せずにコンパイルする方法は?
-
[解決済み] 'parent.relativePath' は org.apache:apache ではなく com.mycompany:MyProject を指しています - なぜですか?