Я получаю предупреждение 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, анализ выполняется Maven в работе Jenkins в многомодульном Java-проекте. Плагин Git 1.2 установлен.
Запуск git blame вручную в оболочке bash для любого из проблемных файлов дает ожидаемый результат.
Связанные вопросы, которые я обнаружил, касались SVN, моя проблема связана с Git.
Как мне получить информацию о виновности git на Sonarqube?
2 ответа
Причиной была ошибка JGit. JGit не поддерживает .gitattributes
. У меня был ident
в моем { {X2}}. Обычная консоль 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
У меня была аналогичная проблема: файл в моем проекте был создан в процессе сборки и не хранился в системе контроля версий. В моем случае это был api.json
.
На этапе сборки бегуна SonarQube в Team City я добавил этот файл в исключения в дополнительных параметрах.
-Dsonar.exclusions=**/spec/api.json
И ошибка исчезла.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.