1. ホーム
  2. java

[解決済み] ソナクベ。以下のファイルの注釈情報が欠落しています。

2022-01-31 07:48:28

質問内容

次のような警告が表示されます。 Missing blame information for the following files SonarQubeで解析中に

[INFO] [22:19:57.714] Sensor SCM Sensor
[INFO] [22:19:57.715] SCM provider for this project is: git
[INFO] [22:19:57.715] 48 files to be analyzed
[INFO] [22:19:58.448] 0/48 files analyzed
[WARN] [22:19:58.448] Missing blame information for the following files:
(snip 48 lines)
[WARN] [22:19:58.449] This may lead to missing/broken features in SonarQube
[INFO] [22:19:58.449] Sensor SCM Sensor (done) | time=735ms

SonarQube 5.5を使用しています。解析はJenkinsのジョブでMavenにより行われ、複数モジュールのJavaプロジェクトになります。 Gitプラグイン1.2がインストールされています。

bashシェルで問題のあるファイルに対して手動でgit blameを実行すると、期待通りの出力が得られます。

私が見つけた関連する質問はすべてSVNに関するもので、私の問題はGitに関するものです。

Sonarqubeでgitのblame情報を取得する方法を教えてください。

解決方法は?

原因は JGitのバグ . JGit は .gitattributes . 私は ident 私の .gitattributes . プレーンコンソール git ソースをチェックアウトして、適用した ident オン $Id$ というマクロがあったのですが、JGit はそれを無視して、実際には何もないところにコミットされていない差分を見出したのです。

の友好的な人たちは SonarQubeメーリングリスト でのデバッグを提案されました。 スタンドアロン JGit コマンドライン配布 :

chmod +x /where/is/org.eclipse.jgit.pgm-<version>-r.sh
/where/is/org.eclipse.jgit.pgm-<version>-r.sh blame -w /path/to/offending/file

この特定の JGit バグは 5 年以上解決されておらず、すぐに解決される見込みもないため、私は $Id$ マクロをすべてのソースから削除しました。

これは、私が使用した(Bash)コードで、すべての $Id$ マクロを使用します。

find */src -name "*.java" | xargs -n 1 sed -i '/$Id.*$/d'
find */src -name "*.java" | xargs git add
git commit -m "Remove $Id$ macros"
git push