﻿# Интеграция результатов анализа PVS\-Studio в SonarQube


> Интеграция PVS\\\-Studio с платформой SonarQube доступна только при наличии \[Enterprise лицензии\]\(https://pvs\-studio\.ru/ru/order/license/\)\\\. Вы можете запросить пробную Enterprise лицензию \[здесь\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\#trial\_form\)\\\.



[SonarQube](https://www.sonarsource.com/products/sonarqube/) — это открытая платформа для обеспечения непрерывного контроля качества исходного кода, поддерживающая большое количество языков программирования и позволяющая получать отчеты по таким метрикам, как дублирование кода, соответствие стандартам кодирования, покрытие тестами, сложность кода, потенциальные ошибки и т\.д\. SonarQube удобно визуализирует результаты анализа и позволяет отслеживать динамику развития проекта во времени\.

Демонстрация возможностей платформы SonarQube доступна [здесь](https://www.sonarsource.com/products/sonarqube/)\.

Для импорта результатов анализа в SonarQube PVS\-Studio предоставляет плагин\. Использование плагина позволяет добавлять сообщения, найденные анализатором PVS\-Studio, в базу сообщений сервера SonarQube\. С помощью Web интерфейса SonarQube можно фильтровать сообщения, осуществлять навигацию по коду для анализа ошибок, назначать задачи на исполнителей и контролировать их выполнение, анализировать динамику количества ошибок и оценивать уровень качества кода проекта\.

## Смотри, а не читай \(Вк Видео\)

<https://vk.com/video_ext.php?oid=-11805870&id=456239367&hash=5391b9192562f094>

## Системные требования

* Операционная система: Windows, Linux; macOS
* Версия Java: 8 и выше;
* SonarQube: 7\.9 или выше;
* Анализатор PVS\-Studio для [C\+\+](https://pvs-studio.ru/ru/docs/manual/0039/) или [Java](https://pvs-studio.ru/ru/docs/manual/6703/)\. 
* Enterprise\-лицензия PVS\-Studio\.

## Плагины PVS\-Studio и их установка

**Важно**: Начиная с версии **9\.5,** версия SonarQube Plugin API стала отличаться от фактической версии SonarQube\. Эта версия API используется для того, чтобы узнать, совместим ли плагин PVS\-Studio с SonarQube\. Маппинг версий SonarQube в версии SonarQube Plugin API можно посмотреть [в разделе **Compatibility** на GitHub](https://github.com/SonarSource/sonar-plugin-api/)\. Также узнать версию SonarQube Plugin API** **можно из файла по пути `sonarqube-VERSION/lib/sonar-application-VERSION.jar/sonar-api-version.txt`, где `sonarqube-VERSION` — это папка установки SonarQube\.

Дополнительно при загрузке отчёта анализатора PVS\-Studio в SonarQube в лог выводится сообщение c текущей версией SonarQube Plugin API, например: 

```cpp
INFO Edition: COMMUNITY, SonarQube Plugin API Version: 10.1.0.809
```

Пользователям PVS\-Studio доступны следующие плагины для SonarQube:

* `sonar-pvs-studio-plugin.jar` — плагин для импорта результатов PVS\-Studio в проект на сервере SonarQube\. В зависимости от **версии SonarQube**, необходимо использовать **определённый файл плагина:**
  * SonarQube всех изданий** **версии** 7\.9  ̶  10\.1 **\(**до **SonarQube Plugin API** 9\.17\.0\.587** **включительно**\) — [`sonar-pvs-studio-plugin-old-versions-before-10.2 .jar`](https://pvs-studio.ru/ru/pvs-studio/download-all/);
  * [SonarQube Community Build](https://www.sonarsource.com/open-source-editions/sonarqube-community-edition/) и [SonarQube Server](https://www.sonarsource.com/products/sonarqube/downloads/) версии** 10\.2 и выше **\(**начиная с **SonarQube Plugin API **10\.1\.0\.809 и выше**\) — [`sonar-pvs-studio-plugin.jar`](https://pvs-studio.ru/ru/pvs-studio/download-all/)\. **После версии 10\.7 **изменилась схема управления версиями изданий SonarQube\. Новый шаблон версии SonarQube Community: `YY.M.0.BUILDNumber`\. Пример: [SonarQube Community Build 25\.1\.0\.102122](http://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.1.0.102122.zip)\. Новый шаблон версии** **SonarQube Developer/Enterprise/Data Center: `YYYY.RELEASENumber.PATCHNumber.BUILDNumber`\. Пример: [SonarQube Developer 2025\.1\.0\.102418](https://binaries.sonarsource.com/CommercialDistribution/sonarqube-developer/sonarqube-developer-2025.1.0.102418.zip)\)\.
* `sonar-pvs-studio-lang-plugin.jar` — плагин, позволяющий создавать профиль \(quality profile\) с языком C/C\+\+/C\#\. Он предоставляется для совместимости перехода плагинов PVS\-Studio со старых версий SonarQube с сохранением ранее полученных метрик/статистики\. В будущих релизах его поддержка может прекратиться\. Если вы создаёте новый проект, используйте профиль с одним из стандартных языков \(C\+\+, C\#, Java, Go, JavaScript/TypeScript\)\.

После установки сервера SonarQube скопируйте плагин \(`sonar-pvs-studio-plugin.jar`\) в следующую директорию:

```cpp
SONARQUBE_HOME/extensions/plugins
```

В зависимости от языка, для которого вы загружаете результаты анализа, установите также соответствующие плагины из списка \(часть из них может быть установлена по умолчанию, в зависимости от используемой вами редакции SonarQube\):

* SonarCXX plugin \([GitHub](https://github.com/SonarOpenCommunity/sonar-cxx/releases)\)
* SonarC\# plugin \([Marketplace](https://www.sonarplugins.com/csharp)\)
* SonarJava plugin \([Marketplace](https://www.sonarplugins.com/java)\)
* SonarCFamily \([Marketplace](https://www.sonarplugins.com/cpp)\)\. Этот плагин предназначен только для [SonarQube Developer Edition](https://www.sonarsource.com/products/sonarqube/downloads)\.
* SonarGo plugin \([GitHub](https://github.com/SonarSource/sonar-go)\)\. Этот плагин поставляется по умолчанию вместе с SonarQube и располагается в директории `SonarQubeFolder/lib/extensions` архива SonarQube\.
* SonarJS plugin \([GitHub](https://github.com/SonarSource/SonarJS)\)\. Этот плагин поставляется по умолчанию вместе с SonarQube и располагается в директории `SonarQubeFolder/lib/extensions` архива SonarQube\.

После этого перезапустите сервер SonarQube\.

## Сохранение совместимости репозиториев при переходе на новую версию SonarCXX плагина

**Примечание**: Если вы сразу начали использовать обновленную версию плагина SonarCXX \(2\.0\.\+\) для своего проекта, использующего языки C/C\+\+, то для вас нижеизложенная информация неактуальна\. 

В SonarCXX 2\.0\.\+ разработчиками были внесены многочисленные изменения с учетом опыта предыдущих версий\. Одно из кардинальных изменений – переименование языкового ключа с `C++` на `CXX`\. Это изменение привело к тому, что PVS\-Studio плагин теперь по умолчанию формирует разные несвязанные между собой репозитории для этих языков\. Поэтому, если вы загрузите отчет PVS\-Studio после обновления SonarCXX плагина без предварительной настройки, то все существующие ранее **Issues** от PVS\-Studio, будут считаться удаленными, а все Issues из отчета будут считаться новыми\. 

Если вам необходимо обновить SonarCXX с сохранением истории **Issues** от PVS\-Studio \(например, сохранить статус **Won't Fix** или **False Positive **со всеми комментариями\), то вам необходимо следовать данной инструкции:

* если вы используете Quality Profile для языка C\+\+, который вы долго настраивали, то сделайте его резервную копию и в сохраненном файле замените `<language>c++</language>` на `<language>cxx</language>`;
* остановите сервер SonarQube;
* в файле конфигурации SonarQube сервера `SonarQubeFolder/conf/sonar.properties` добавьте строчку `sonar.pvs-studio.enableCompatibilitySonarCXXRepositories=true`;
* замените файл SonarCXX плагина в папке `SonarQubeFolder/extentions/plugins/` на новую версию плагина \(**\>\= 2\.0\.0**\);
* запустите SonarQube сервер \(`SonarQubeFolder/bin/windows-x86-64/StartSonar.bat`\);
* восстановите \(**restore**\) сохраненный ранее Quality Profile или создайте новый для языка CXX;
* если требуется, активируйте в Quality Profile для языка CXX правила из PVS\-Studio репозитория;
* установите, загруженный/созданный ранее Quality Profile, профилем по умолчанию \(**Set as Default**\)\.

После этого вы сможете загружать отчеты PVS\-Studio для проектов с использованием Quality Profile для языка CXX\.

**Важно**: Если вы ранее загружали отчеты PVS\-Studio с использованием плагина SonarCXX версии 2\.0\.\+ без добавления строки из инструкции в файл `SonarQubeFolder/conf/sonar.properties`, то все **Issues**, которые были ранее загружены, изменят свой статус на **Removed** и будут удалены со временем \(по умолчанию 30 дней\)\.

## Интеграция PVS\-Studio в Docker\-образ SonarQube

Самый простой и быстрый способ развёртывания сервера SonarQube — это использование образа [SonarQube из Dockerhub](https://hub.docker.com/_/sonarqube)\.

Для загрузки отчётов анализатора PVS\-Studio в SonarQube необходимо установить последнюю версию плагина PVS\-Studio для SonarQube \(которую можно скачать [на этой странице](https://pvs-studio.ru/ru/pvs-studio/download-all/)\), а также один из плагинов для C/C\+\+, если в анализируемых вами проектах используются эти языки\.

Ниже приведён пример Docker\-файла, который позволит создать образ с [SonarQube Community Edition](https://www.sonarsource.com/products/sonarqube/downloads) и всеми необходимыми плагинами:

```cpp
# Для использования SonarQube Enterprise Edition замените "lts-community" 
# на "lts" в теге базового docker образа.
FROM sonarqube:lts-community
USER root

# Установка утилиты curl
RUN apk add curl || (apt-get update && apt-get install -y curl)

# Используйте последнюю версию плагина.
# Найти её можно по на странице: 
# https://pvs-studio.com/en/pvs-studio/download-all/
ARG PVS_VER=7.27.75620.2023

# Установка плагина PVS-Studio для SonarQube. 
RUN curl -Lo \
/opt/sonarqube/extensions/plugins/sonar-pvs-studio-plugin-$PVS_VER.jar \
https://cdn.pvs-studio.com/sonar-pvs-studio-plugin-$PVS_VER.jar

# Если вам необходима другая версия плагина CXX, измените её здесь. 
ARG C_VER=cxx-2.1.1
ARG C_JAR=sonar-cxx-plugin-2.1.1.488.jar

# Установка плагина SonarCXX (нужен для работы с C/C++ проектами). 
RUN curl -Lo \
/opt/sonarqube/extensions/plugins/$C_JAR \
https://github.com/SonarOpenCommunity/sonar-cxx/releases/download/$C_VER/$C_JAR

# Смена пользователя, который будет использоваться в контейнере
USER sonarqube
```

После создания файла необходимо собрать Docker\-образ при помощи команды:

```cpp
docker build -f dockerfile -t sonarqube-pvs-studio ./
```

Для запуска контейнера SonarQube из ранее собранного образа, используйте команду:

```cpp
docker run -p 9000:9000 sonarqube-pvs-studio
```

**Важно:** чтобы не потерять данные из SonarQube при удалении контейнера, монтируйте каталоги по путям, определённым в [инструкции к контейнеру SonarQube в DockerHub](https://hub.docker.com/_/sonarqube)\. Вот пример команды запуска контейнера с монтированными каталогами:

```cpp
docker run -v /path/to/data:/opt/sonarqube/data 
           -v /path/to/logs:/opt/sonarqube/logs 
           -v /path/to/extentions:/opt/sonarqube/extensions 
           -p 9000:9000 sonarqube-pvs-studio
```

Чтобы увидеть в браузере SonarQube запущенный в Docker\-контейнере, перейдите по ссылке http://localhost:9000/\.

Для входа введите стандартные значения login\-а и пароля администратора SonarQube:

```cpp
Login: admin
Password: admin
```

После входа установите новый пароль для аккаунта администратора\.

## Создание и настройка Quality Profile

**Примечание:** Ниже приведена настройка Quality Profile с предустановленными плагинами PVS\-Studio и Sonar C\+\+ Community\(v2\.0\.4\)\. Примите во внимание то, что, если Вы используете Sonar C\+\+ Community плагин версии ниже 2\.0\+, то вместо языка CXX, будут С\+\+\(Community\) / С\(Community\)\.

Quality Profile \- это коллекция диагностик, которые выполняются во время анализа\. Вы можете включать диагностики PVS\-Studio в существующие профили, либо создать новый\. Профиль привязывается к конкретному языку программирования, но вы можете создавать несколько профилей с разными наборами правил\. Все действия доступны пользователям из группы `sonar-administrators`\.

Создать новый профиль можно в меню **Quality Profiles \> Create**:

![SonarQube_ru/image1.png](https://import.viva64.com/docx/blog/SonarQube_ru/image1.png)

Для включения диагностик анализатора в активный профиль, выберите интересующий вас репозиторий в меню **Rules \> Repository**:

![SonarQube_ru/image2.png](https://import.viva64.com/docx/blog/SonarQube_ru/image2.png)

Далее добавьте все диагностические правила в свой профиль, нажав на кнопку **Bulk Change**, или выберите конкретные правила вручную\.

Окно активации диагностик выглядит следующим образом:

![SonarQube_ru/image3.png](https://import.viva64.com/docx/blog/SonarQube_ru/image3.png)

Вы также можете фильтровать правила по тегам, прежде чем выбрать их для профиля:

![SonarQube_ru/image4.png](https://import.viva64.com/docx/blog/SonarQube_ru/image4.png)

После создания/настройки соответствующего профиля, назначьте один из них профилем по умолчанию:

![SonarQube_ru/image5.png](https://import.viva64.com/docx/blog/SonarQube_ru/image5.png)

Профиль по умолчанию запускается на файлах для указанного языка программирования\. Профили не обязательно делить по используемым утилитам\. Вы можете создать единый профиль для вашего проекта, добавив туда диагностические правила из разных утилит\.

Так как в SonarQube каждое расширение анализируемого файла должно быть однозначно присвоено одному языку программирования, Sonar C\+\+ Community плагин версии 2\.0\+ во избежание конфликтов с другими языковыми плагинами по умолчанию не определяет расширения файлов\. Для этого Вам нужно самостоятельно их определить:

![SonarQube_ru/image7.png](https://import.viva64.com/docx/blog/SonarQube_ru/image7.png)

При выходе новой версии PVS\-Studio могут добавиться новые диагностики, поэтому нужно обновить версию плагина на сервере SonarQube и добавить новые диагностики в Quality Profile, который использует диагностики PVS\-Studio\. Настройка автоматического обновления описана ниже, в отдельном разделе\.

## Анализ кода и импорт результатов в SonarQube

Для импорта результатов анализа в SonarQube используется утилита [SonarQube Scanner](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner/)\. Для работы ей требуется конфигурационный файл с именем `sonar-project.properties`, размещённый в корневом каталоге проекта\. Конфигурационный файл содержит настройки для анализа заданного проекта, при этом часть или все настройки можно перенести в параметры запуска утилиты SonarQube Scanner\.

> Перед первым запуском анализа вам необходимо ввести лицензию\. Как это сделать — можно узнать в этой [документации](https://pvs-studio.ru/ru/docs/manual/0046/)\.

Далее будут рассмотрены типовые режимы запуска сканера для импорта результатов анализа PVS\-Studio в SonarQube на разных платформах\. SonarQube Scanner будет автоматически подхватывать конфигурационный файл с именем `sonar-project.properties` в текущей директории запуска\.

### SonarScanner for \.NET для C\# проектов

Для C\# проектов возможно использовать два варианта SonarScanner\-а:

* [SonarQube Scanner](https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/) \(нужен `sonar-project.properties`\);
* [SonarQube Scanner for \.NET](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner-for-dotnet/) \(не нужен `sonar-project.properties`\)\. 

Разница между ними заключается в том, что [SonarQube Scanner for \.NET](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner-for-dotnet/) является более специализированным\. Он отображает больше статистики, которую предоставляет SonarQube для C\# проекта, чем [SonarQube Scanner](https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/)\. Например, для отчёта, загруженного [SonarQube Scanner](https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/), на вкладке со списком проектов \(превью проектов\) в SonarQube не отображается краткая статистика по проекту, в отличии от проекта, загруженного при помощи [SonarQube Scanner for \.NET](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner-for-dotnet/):

![SonarQube_ru/image9.png](https://import.viva64.com/docx/blog/SonarQube_ru/image9.png)



### Windows: C, C\+\+, C\#

MSBuild\-проекты проверяются с помощью утилиты `PVS-Studio_Cmd.exe`\. 

**Вариант 1**

Одним запуском `PVS-Studio_Cmd` вы можете получить отчёт анализатора и конфигурационный файл `sonar-project.properties`:

```cpp
PVS-Studio_Cmd.exe ... -o Project.plog --sonarqubedata ...
```

Команда запуска сканера будет выглядеть следующим образом:

```cpp
sonar-scanner.bat ^
  -Dsonar.projectKey=ProjectKey ^
  -Dsonar.projectName=ProjectName ^
  -Dsonar.projectVersion=1.0 ^
  -Dsonar.pvs-studio.reportPath=Project.plog ^
  -Dsonar.login=admin ^
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

**Вариант 2**

При использовании [SonarQube Scanner for \.NET](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner-for-dotnet/) для C\# проектов необходимо использовать специальный набор команд, а также не нужно генерировать файл `sonar-project.properties` \(аргумент `--sonarqubedata` из `PVS-Studio_Cmd.exe`\) при запуске анализа:

* SonarQube Scanner for \.NET Framework:

```cpp
SonarScanner.MSBuild.exe begin ... /d:sonar.pvs-studio.reportPath=Project.plog

MSBuild.exe Project.sln /t:Rebuild ...

PVS-Studio_Cmd.exe -t Project.sln ... -o Project.plog

SonarScanner.MSBuild.exe end
```

* SonarQube Scanner for \.NET:

```cpp
dotnet <path to SonarScanner.MSBuild.dll>
       begin /d:sonar.pvs-studio.reportPath=Project.plog

dotnet build Project.sln /t:Rebuild ...

PVS-Studio_Cmd.exe -t Project.sln ... -o Project.plog

dotnet <path to SonarScanner.MSBuild.dll> end
```

### Windows, Linux, macOS: Java

Добавьте следующие строки в проверяемый анализатором PVS\-Studio Java проект \(в зависимости от типа проверяемого проекта\):

**Maven**

```cpp
<outputType>json</outputType>
<outputFile>output.json</outputFile>
<sonarQubeData>sonar-project.properties</sonarQubeData>
```

**Gradle**

```cpp
outputType = 'json'
outputFile = 'output.json'
sonarQubeData='sonar-project.properties'
```

**Ядро Java анализатора**

Windows:

```cpp
java -jar pvs-studio.jar ^
     -s ./ ^
     --ext-file /path/to/file/with/classpath/entries ^
     -o output.json ^
     --output-type json ^
     --sonarqubedata sonar-project.properties
```

Linux/macOS:

```cpp
java -jar pvs-studio.jar \
     -s ./ \
     --ext-file /path/to/file/with/classpath/entries \
     -o output.json \
     --output-type json \
     --sonarqubedata sonar-project.properties
```

После завершения работы Java анализатора конфигурационный файл SonarQube также будет создан автоматически\.

Команда запуска сканера будет выглядеть следующим образом:

Windows:

```cpp
sonar-scanner.bat ^
  -Dsonar.projectKey=ProjectKey ^
  -Dsonar.projectName=ProjectName ^
  -Dsonar.projectVersion=1.0 ^
  -Dsonar.pvs-studio.reportPath=output.json ^
  -Dsonar.login=admin ^
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

Linux/macOS:

```cpp
sonar-scanner \
  -Dsonar.projectKey=ProjectKey \
  -Dsonar.projectName=ProjectName \
  -Dsonar.projectVersion=1.0 \
  -Dsonar.pvs-studio.reportPath=output.json \
  -Dsonar.login=admin \
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

### Windows, Linux, macOS: Go

В случае Go проекта, конфигурационный файл `sonar-project.properties`  необходимо создать самостоятельно с таким содержимым:

```cpp
sonar.projectBaseDir=path/to/project/dir
sonar.sources=path/to/project/dir
sonar.inclusions=**/*.go
```

В свойствах должен быть указан путь до локальной директорию проекта\.

Получить отчет анализатора можно с помощью следующей команды:

```cpp
pvs-golang analyze path/to/project/dir .... -o report.json
```

Команда запуска сканера будет выглядеть следующим образом:

Windows:

```cpp
sonar-scanner.bat ^
  -Dsonar.projectKey=ProjectKey ^
  -Dsonar.projectName=ProjectName ^
  -Dsonar.projectVersion=1.0 ^
  -Dsonar.pvs-studio.reportPath=report.json ^
  -Dsonar.login=admin ^
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

Linux/macOS:

```cpp
sonar-scanner \
  -Dsonar.projectKey=ProjectKey \
  -Dsonar.projectName=ProjectName \
  -Dsonar.projectVersion=1.0 \
  -Dsonar.pvs-studio.reportPath=report.json \
  -Dsonar.login=admin \
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

### Windows, Linux, macOS: JavaScript и TypeScript

В случае JavaScript или TypeScript проекта, конфигурационный файл `sonar-project.properties`  необходимо создать самостоятельно с таким содержимым:

```cpp
sonar.projectBaseDir=path/to/project/dir
sonar.sources=path/to/project/dir
sonar.inclusions=**/*.js,**/*.ts
```

В свойствах должен быть указан путь до локальной директорию проекта\.

Получить отчет анализатора можно с помощью следующей команды:

```cpp
pvs-js analyze path/to/project/dir .... -o report.json
```

Команда запуска сканера будет выглядеть следующим образом:

Windows:

```cpp
sonar-scanner.bat ^
  -Dsonar.projectKey=ProjectKey ^
  -Dsonar.projectName=ProjectName ^
  -Dsonar.projectVersion=1.0 ^
  -Dsonar.pvs-studio.reportPath=report.json ^
  -Dsonar.login=admin ^
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

Linux/macOS:

```cpp
sonar-scanner \
  -Dsonar.projectKey=ProjectKey \
  -Dsonar.projectName=ProjectName \
  -Dsonar.projectVersion=1.0 \
  -Dsonar.pvs-studio.reportPath=report.json \
  -Dsonar.login=admin \
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

### Linux, macOS: C, C\+\+, C\#

В случае С/C\+\+ проекта, конфигурационный файл необходимо создать самостоятельно\. Например, он может быть с таким содержимым:

```cpp
sonar.projectKey=my:project
sonar.projectName=My project
sonar.projectVersion=1.0
sonar.pvs-studio.reportPath=report.json
sonar.sources=path/to/directory/with/project/sources
```

**Вариант 1**

В случае C\# проекта получить отчет анализатора вместе с конфигурационным файлом можно с помощью следующей команды:

```cpp
pvs-studio-dotnet .... -o report.json –sonarqubedata
```

Запуск [sonar\-scanner](https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/) осуществляется следующим образом:

```cpp
sonar-scanner\
  -Dsonar.projectKey=ProjectKey \
  -Dsonar.projectName=ProjectName \
  -Dsonar.projectVersion=1.0 \
  -Dsonar.pvs-studio.reportPath=report.json \
  -Dsonar.login=admin \
  -Dsonar.password=NEW_ADMIN_PASSWORD
```

**Вариант 2**

При использовании [SonarQube Scanner for \.NET](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner-for-dotnet/) для C\# проектов необходимо использовать специальный набор команд, а также не нужно генерировать файл `sonar-project.properties` \(аргумент `--sonarqubedata` из `pvs-studio-dotnet`\) при запуске анализа:

```cpp
dotnet <path to SonarScanner.MSBuild.dll>
       begin /d:sonar.pvs-studio.reportPath=report.json

dotnet build Project.sln /t:Rebuild ...

pvs-studio-dotnet .... -o report.json

dotnet <path to SonarScanner.MSBuild.dll> end
```

C SonarQube 2025\.1 свойство `-Dsonar.password` было удалено, поэтому вместо него нужно использовать токен `-Dsonar.token`\.

Команда в таком случае будет выглядеть так:

```cpp
-Dsonar.projectKey=ProjectKey ^
  -Dsonar.projectName=ProjectName ^
  -Dsonar.projectVersion=1.0 ^
  -Dsonar.pvs-studio.reportPath=Project.plog ^
  -Dsonar.token=TOKEN
```

### sonar\-project\.properties

Для более глубокой настройки анализа своего проекта, вы можете самостоятельно составить конфигурационный файл из следующих настроек \(или отредактировать создаваемый по умолчанию файл при проверке MSBuild и Java проектов\):

* `sonar.pvs-studio.reportPath` — путь к отчёту анализатора в формате \.plog \(для MSBuild проектов\) или \.json;
* `sonar.pvs-studio.licensePath` — путь к лицензии анализатора PVS\-Studio \(если проверяется MSBuild проект, вы можете передать эту настройку с помощью параметра `sonar.pvs-studio.settingsPath`\)\. Путь до файла по умолчанию `-- ~/.config/PVS-Studio/PVS-Studio.lic` на Linux и macOS;
* `sonar.pvs-studio.sourceTreeRoot` — путь к директории проекта на текущем компьютере, если отчёт анализатора был получен на другом компьютере, Docker\-контейнере и т\.п\. Задание данного пути позволяет передавать в `sonar.pvs-studio.reportPath` отчёт, сгенерированный с относительными путями \(если проверяется MSBuild проект, вы можете передать эту настройку с помощью параметра `sonar.pvs-studio.settingsPath`\);
* `sonar.pvs-studio.settingsPath` — путь к `Settings.xml` для MSBuild проектов, проверяемых на Windows\. В этом файле уже содержится информация о `licencePath` и `sourceTreeRoot`, поэтому эти параметры можно не указывать отдельно\. Путь по умолчанию `-- %AppData%\PVS-Studio\Settings.xml`\. Файл используется только на Windows;
* `sonar.pvs-studio.cwe` — включает добавление CWE ID к предупреждениям анализатора\. По умолчанию эта опция выключена\. Используйте значение active для включения;
* `sonar.pvs-studio.misra` — включает добавление идентификатора MISRA к предупреждениям анализатора\. По умолчанию эта опция выключена\. Используйте значение active для включения;
* `sonar.pvs-studio.language` — включает языковой плагин C/C\+\+/C\#\. По умолчанию эта опция выключена\. Используйте значение active для включения\. Используйте данную настройку, если вы используете профиль с языком C/C\+\+/C\#, добавляемым отдельным плагином PVS\-Studio\. **Данный плагин предоставляется для совместимости перехода со старых версий SonarQube плагинов PVS\-Studio с сохранением ранее полученных метрик\\статистики, в будущих релизах его поддержка может быть прекращена\.**

Описание остальных стандартных параметров конфигурации сканера доступно в [общей документации](https://docs.sonarqube.org/latest/analyzing-source-code/analysis-parameters/) SonarQube\.

### Загрузка отчёта при использовании плагина SonarCFamily

При использовании плагина PVS\-Studio вместе с плагином SonarCFamily необходимо дополнительно использовать SonarSource Build Wrapper или [Compilation Database](https://clang.llvm.org/docs/JSONCompilationDatabase.html) \(с версии SonarQube 9\.1\) при загрузке отчёта PVS\-Studio\. Подробная [инструкция](https://docs.sonarqube.org/latest/analyzing-source-code/languages/c-family/) об их использовании находится на сайте SonarQube\.

При загрузке отчёта необходимо будет указать свойство `sonar.cfamily.build-wrapper-output` или `sonar.cfamily.compile-commands` как аргумент при запуске sonar\-scanner \(например: `-Dsonar.cfamily.build-wrapper-output=директория_с_результатами_работы_Build_Wrapper`\) или добавить его в файл `sonar-project.properties`\.

### Многомодульный проект

Когда директории подпроектов расположены на разных уровнях, загрузить в SonarQube результаты анализа нескольких подпроектов в один проект со стандартными настройками становится невозможным\. Это связано с тем, что для такой структуры подпроектов требуется дополнительная настройка индексатора в утилите SonarScanner\.

Правильно настроить такой проект можно с помощью модулей, где каждый модуль настраивается для одного подпроекта:

```cpp
sonar.projectKey=org.mycompany.myproject
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.sources=src

sonar.modules=module1,module2

module1.sonar.projectName=Module 1
module1.sonar.projectBaseDir=modules/mod1

module2.sonar.projectName=Module 2
module2.sonar.projectBaseDir=modules/mod2
```

Для указания пути к файлу с результатами анализа PVS\-Studio есть 2 пути\.

**Первый способ**

Указать разные отчёты для модулей:

```cpp
....
sonar.modules=module1,module2

module1.sonar.projectName=Module 1
module1.sonar.projectBaseDir=modules/mod1
module1.sonar.pvs-studio.reportPath=/path/to/report1.plog

module2.sonar.projectName=Module 2
module2.sonar.projectBaseDir=modules/mod2
module2.sonar.pvs-studio.reportPath=/path/to/report2.plog
```

**Второй способ**

Указать один отчёт на уровне проекта:

```cpp
sonar.projectKey=org.mycompany.myproject
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.sources=src
sonar.pvs-studio.reportPath=/path/to/report.plog

sonar.modules=module1,module2
....
```

В этом случае каждый модуль загрузит из отчёта только те предупреждения, которые относятся к нему\. К сожалению, на файлы из других модулей будет выдан `WARN` об отсутствии файлов в вывод утилиты SonarScanner, но все результаты анализа будет загружены корректно\.

## Соответствие уровней достоверности предупреждения PVS\-Studio уровням Severity предупреждений в SonarQube

В отчётах анализатора PVS\-Studio каждое предупреждение имеет такую характеристику, как уровень достоверности:

* **High \(1\)** — высокий уровень вероятности ошибки в коде;
* **Medium \(2\)** — средний уровень вероятности ошибки в коде;
* **Low \(3\)** — низкий уровень вероятности ошибки в коде;
* **Fails \(0\)** — специальная категория, к которой относятся внутренние сообщения анализатора, информирующие о возникновении каких\-то проблем при его работе\.

В SonarQube у **Issues** есть похожая характеристика — **Severity**\. Количество уровней **Severity** у **Issue** в SonarQube отличается \(их 5, а в PVS\-Studio их 4\)\. Кроме этого, сервер SonarQube [в определённый момент стал поддерживать два режима](https://docs.sonarsource.com/sonarqube-server/latest/instance-administration/analysis-functions/instance-mode/instance-mode-overview/), в которых отличается отображение **Severity** уровней на вкладке **Issues**:

* [Standard Experience Mode](https://docs.sonarsource.com/sonarqube-server/latest/instance-administration/analysis-functions/instance-mode/standard-experience/)

![SonarQube_ru/image10.png](https://import.viva64.com/docx/blog/SonarQube_ru/image10.png)

* [Multi\-Quality Rule \(MQR\) Mode](https://docs.sonarsource.com/sonarqube-server/latest/instance-administration/analysis-functions/instance-mode/mqr-mode/)

![SonarQube_ru/image11.png](https://import.viva64.com/docx/blog/SonarQube_ru/image11.png)

Соответствие уровня достоверности предупреждения PVS\-Studio уровню Severity у Issue в SonarQube представлена в таблице:

|PVS\\\-Studio Warning |Standard Experience Mode|Multi\\\-Quality Rule Mode|
|---|---|---|
|Fails \\\(0\\\)|Info|Info|
|High \\\(1\\\)|Critical|High|
|Medium \\\(2\\\)|Major|Medium|
|Low \\\(3\\\)|Minor|Low|
|\\\-|Blocker|Blocker|

## Исследователям безопасности приложений

Со всеми возможности анализатора по поиску потенциальных уязвимостей в коде вы можете ознакомиться на странице [PVS\-Studio SAST](https://pvs-studio.ru/ru/pvs-studio/sast/) \(Static Application Security Testing\)\.

Информация о безопасности проверяемого кода, предоставляемая анализатором PVS\-Studio, дополнительно помечается в отображаемых SonarQube результатах анализа\.

### Теги cwe, cert, misra, sec

В меню **Issues \> Tag** или **Rules \> Tag** доступны следующие теги для группировки предупреждений PVS\-Studio по разным стандартам безопасности:

* misra
* cert
* cwe
* sec

Также вы можете выбрать конкретный CWE ID, если такой доступен \(если сообщение анализатора соответствует нескольким идентификаторам CWE, оно будет отмечено одним общим тегом cwe \- используйте префиксы в тексте предупреждений для фильтрации таких идентификаторов\):

![SonarQube_ru/image12.png](https://import.viva64.com/docx/blog/SonarQube_ru/image12.png)

### Security Category

В SonarQube 7\.8 и 8\.4, на страницах **Issues** и **Rules** доступен новый фильтр по категориям безопасности\. При помощи этого фильтра SonarQube позволяет классифицировать правила в соответствии стандартам безопасности, таким как:

* Sans Top 25
* OWASP Top 10
* CWE

Правила и проблемы от PVS\-Studio, которые сопоставлены с CWE ID, также можно группировать в этом меню \(**Security Category \> CWE**_\):_

![SonarQube_ru/image14.png](https://import.viva64.com/docx/blog/SonarQube_ru/image14.png)

Примечание\. Начиная с версии SonarQube 8\.5, во вкладку **Security Category** могут попасть только **Issues**/**Rules**, связанные с безопасностью, а именно те **Issues**/**Rules**, у которых тип `Vulnerability` или `Security Hotspot`\.

### PVS\-Studio предупреждения как потенциальные уязвимости

Все правила PVS\-Studio по умолчанию имеют тип `Bug`\. Если вам необходимо изменить тип правила с `Bug` на '`Vulnerability` при наличии CWE ID или если правило относится к [рейтингу OWASP Top 10](https://pvs-studio.ru/ru/pvs-studio/sast/owasptopten/), то для этого необходимо в конфигурационном файле сервера `$SONARQUBE_HOME\conf \sonar.properties` добавить следующую строчку:

```cpp
sonar.pvs-studio.treatPVSWarningsAsVulnerabilities=active
```

Чтобы изменения вступили в силу нужно перезапустить сервер SonarQube\. После того как вы это сделали, правила с CWE ID или относящиеся к [рейтингу OWASP Top 10](https://pvs-studio.ru/ru/pvs-studio/sast/owasptopten/) будут иметь тип `Vulnerability`, а новые сгенерированные проблемы уже будут учитывать это изменение\.

Примечание\. Если у вас до этого были старые проблемы, то это изменение их не коснется\. Для этого вам необходимо вручную изменить тип у этих проблем\.  

### Префиксы CWE и MISRA у предупреждений

В конфигурационном файле `sonar-project.properties` доступны следующие опции:

```cpp
sonar.pvs-studio.cwe=active
sonar.pvs-studio.misra=active
```

Они включают режим добавления идентификаторов CWE и MISRA к предупреждениям анализатора\. Выглядит это следующим образом:

![SonarQube_ru/image15.png](https://import.viva64.com/docx/blog/SonarQube_ru/image15.png)

Возможность фильтровать предупреждения по соответствующим тегам доступна всегда и не зависит от указанных опций\.

### Статистика по найденным CWE и MISRA

На вкладке **Projects \> Your Project \> Measures** доступны различные метрики кода, вычисляемые после каждого запуска анализа\. Всю собираемую информацию можно выводить в полезные графики\. В секции **Security** вы можете следить за количеством предупреждений, выдаваемых на проект с пометкой CWE и MISRA:

![SonarQube_ru/image16.png](https://import.viva64.com/docx/blog/SonarQube_ru/image16.png)

Остальные, общие метрики сообщений анализатора PVS\-Studio, доступны в отдельной секции **PVS\-Studio**\.

## Дополнительные возможности плагина PVS\-Studio

Большинство действий, доступных для пользователей SonarQube, являются стандартными для этой платформы\. Например, просмотр и сортировка результатов анализа, изменение статуса предупреждения и т\.п\. Поэтому в этом разделе будут описаны только дополнительные возможности, появляющиеся с установкой плагина PVS\-Studio\.

### Сортировка предупреждений по группам

Предупреждения PVS\-Studio делятся на несколько групп, из которых не все могут быть интересны для конкретного проекта\. Поэтому вы можете фильтровать диагностики по следующим тегам при создании профиля или просмотре результатов анализа:

|\*\*Группа диагностик в PVS\\\-Studio\*\*|\*\*Тег в SonarQube\*\*|
|---|---|
|Диагностики общего назначения|pvs\\\-studio\\\#ga|
|Диагностики микро\\\-оптимизаций|pvs\\\-studio\\\#op|
|Диагностики 64\\\-битных ошибок|pvs\\\-studio\\\#64|
|Стандарт MISRA|pvs\\\-studio\\\#misra|
|Диагностики, реализованные по запросам пользователей|pvs\\\-studio\\\#cs|
|Проблемы при работе анализатора кода|pvs\\\-studio\\\#fails|



И стандартные теги, которые используются для предупреждений PVS\-Studio:

|\*\*Стандарты контроля качества кода\*\*|\*\*Тег в SonarQube\*\*|
|---|---|
|Стандарт CWE|cwe|
|Стандарт CERT|cert|
|Стандарт MISRA|misra|
|Стандарт ГОСТ|sec, sec\\\-\\\*|



Стандартные теги SonarQube, в отличии от группы тегов `pvs-studio#`, могут включать, в зависимости от используемого quality\-профиля, сообщения и от других инструментов, помимо PVS\-Studio\.

### Просмотр метрик кода

На вкладке **Projects \> Your Project \> Measures** доступны различные метрики кода, вычисляемые после каждого запуска анализа\. С плагином добавляется секция **PVS\-Studio**, где вы можете найти полезную информацию для проекта и строить графики:

![SonarQube_ru/image17.png](https://import.viva64.com/docx/blog/SonarQube_ru/image17.png)

## Предварительная настройка анализатора

При работе на большой кодовой базе, анализатор неизбежно генерирует большое количество предупреждений\. При этом часто нет возможности поправить все предупреждения сразу\. Для того, чтобы иметь возможность сконцентрироваться на правке наиболее важных предупреждений и не "засорять" статистику, можно провести предварительную настройку анализатора и фильтрацию лога до запуска SonarQube Scanner\. Это можно сделать несколькими способами\.

**1\.** Анализ можно сделать менее "шумным" с помощью настройки **No Noise**\. Она позволяет полностью отключить генерацию предупреждений низкого уровня достоверности \(**Low Certainty**, третий уровень предупреждений\)\. После перезапуска анализа, сообщения этого уровня полностью пропадут из вывода анализатора\. Для включения этой настройки в анализаторе, воспользуйтесь окном настроек [**Specific Analyzer Settings**](https://pvs-studio.ru/ru/docs/manual/0030/) в Windows и общей [документацией](https://pvs-studio.ru/ru/docs/manual/0036/) для Linux и macOS\.

**2\.** Анализ можно ускорить, исключив из проверки внешние библиотеки, код тестов и т\.д\. Для добавления файлов и каталогов в исключения, воспользуйтесь окном настроек [**Don't Check Files**](https://pvs-studio.ru/ru/docs/manual/0014/) в Windows и общей [документацией](https://pvs-studio.ru/ru/docs/manual/0036/) для Linux и macOS\.

**3\.** Если вам нужен дополнительный контроль над тем, какие сообщения анализатора будут попадать в отображаемые результаты, например, по уровню достоверности или кодам ошибок, воспользуйтесь утилитой для фильтрации и преобразования результатов \(Plog Converter\) на соответствующей платформе\.

**4\.** Если вам необходимо изменить важность предупреждения, это делается в настройках самого анализатора, а не в SonarQube\. Сообщения PVS\-Studio имеют следующие уровни достоверности: **High, Medium, Low и Fails**\. В SonarQube им соответствуют уровни **Critical, Major, Minor и Info**\. Изменение уровней описано на странице "[Дополнительная настройка диагностик](https://pvs-studio.ru/ru/docs/manual/0040/)"

## Автоматическое обновление плагинов PVS\-Studio

Автоматизировать процесс обновления позволяет [SonarQube Web Api](https://next.sonarqube.com/sonarqube/web_api/)\. Предположим, на вашем билд\-сервере настроена система автоматического обновления PVS\-Studio \(как это описано в статье [Развертывание PVS\-Studio в больших командах](https://pvs-studio.ru/ru/docs/manual/0025/)\)\. Для того, чтобы обновить плагины PVS\-Studio и добавить новые диагностики в Quality Profile без использования веб\-интерфейса, выполните следующие шаги \(пример для Windows, на других ОС данная процедура выполняется аналогично\):

* Скопируйте файл `sonar-pvs-studio-plugin.jar` из директории установки PVS\-Studio в директорию `$SONARQUBE_HOME\extensions\plugins`\.
* Перезапустите сервер SonarQube\.



Допустим, сервер SonarQube установлен в директории `C:\Sonarqube\` и запущен как сервис\. PVS\-Studio установлена в директории `C:\Program Files (x86)\PVS-Studio\`\. Тогда скрипт для автоматического обновления дистрибутива PVS\-Studio и плагина `sonar-pvs-studio-plugin` будет иметь вид:



```cpp
set PVS-Studio_Dir="C:\Program Files (x86)\PVS-Studio"
set SQDir="C:\Sonarqube\extensions\plugins\"

rem Update PVS-Studio
cd /d "C:\temp\"
xcopy %PVS-Studio_Dir%\PVS-Studio-Updater.exe . /Y
call PVS-Studio-Updater.exe /VERYSILENT /SUPPRESSMSGBOXES
del PVS-Studio-Updater.exe

rem Stop the SonarQube server
sc stop SonarQube

rem Wait until the server is stopped
ping -n 60 127.0.0.1 >nul

xcopy %PVS-Studio_Dir%\sonar-pvs-studio-plugin.jar %SQDir% /Y

sc start SonarQube

rem Wait until the server is started
ping -n 60 127.0.0.1 >nul
```



* Определите ключ Quality Profile, в котором необходимо активировать диагностики\. Получить этот ключ можно с помощью GET\-запроса `api/qualityprofiles/search`, например \(одной строкой\):

```cpp
curl http://localhost:9000/api/qualityprofiles/search
-v -u admin:admin
```

Ответ сервера имеет следующий формат:



```cpp
{
  "profiles": [
    {
     "key":"c++-sonar-way-90129",
     "name":"Sonar way",
     "language":"c++",
     "languageName":"c++",
     "isInherited":false,
     "isDefault":true,
     "activeRuleCount":674,
     "rulesUpdatedAt":"2016-07-28T12:50:55+0000"
    },
    {
     "key":"c-c++-c-pvs-studio-60287",
     "name":"PVS-Studio",
     "language":"c/c++/c#",
     "languageName":"c/c++/c#",
     "isInherited":false,
     "isDefault":true,
     "activeRuleCount":347,
     "rulesUpdatedAt":"2016-08-05T09:02:21+0000"
    }
  ]
}
```

Допустим, нам нужно добавить новые диагностики в профиль PVS\-Studio для языка `c/c++/c#`\. Его ключом является значение c\-c\+\+\-c\-pvs\-studio\-60287\.

* Выполните POST\-запрос `api/qualityprofiles/activate_rules` и укажите параметры `profile_key` \(обязательный параметр\) и `tags`\. Обязательный параметр `profile_key` определяет ключ профиля в SonarQube, в котором будут активированы диагностики\. В рассматриваемом примере этот параметр имеет значение c\-c\+\+\-c\-pvs\-studio\-60287\.




> Обратите внимание на то, что ключ профиля может содержать специальные символы, и при отправке его в POST\\\-запросе нужно произвести экранирование URL символов\\\. Так, ключ профиля c\\\-c\\\+\\\+\\\-c\\\-pvs\\\-studio\\\-60287 должен быть преобразован в c\\\-c%2B%2B\\\-c\\\-pvs\\\-studio\\\-60287



В параметре `tags` передайте теги диагностик, которые нужно активировать в профиле\. Чтобы активировать все диагностики PVS\-Studio, укажите тег pvs\-studio\.

В результате, запрос на добавление всех диагностик в профиль PVS\-Studio будет иметь вид \(одной строкой\):

```cpp
curl --request POST -v -u admin:admin -data
"profile_key=c-c%2B%2B-c-pvs-studio-60287&tags=pvs-studio"
http://localhost:9000/api/qualityprofiles/activate_rules
```

## Рассылка результатов анализа

Настройка рассылки результата анализа происходит в несколько этапов\. Сначала нужно настроить почту, с которой будут приходить оповещения\. После этого каждый пользователь может выбрать необходимые оповещения\.

Для настройки почты, находясь в роли Администратора, нужно перейти в раздел **Administration \> Configuration \> General**\.

После этого необходимо заполнить параметры:

* `SMTP host(email.smtp_host.secured)` — SMTP\-сервер для отправки оповещений;
* `SMTP port(email.smtp_port.secured)` \-— номер порта для отправления писем;
* `SMTP username(email.smtp_username.secured)` — имя пользователя для авторизации;
* `SMTP password(email.smtp_password.secured)` — пароль пользователя для авторизации;
* `From address(email.from)` — email адрес отправителя писем;
* `From name(email.fromName)` — наименование отправителя писем;
* `Email prefix(email.prefix)` — префикс исходящего письма\.

**Примечание\.** В качестве `Server base URL (sonar.core.serverBaseURL)` нужно указать тот IP\-адрес, на котором находится SonarQube\. Это нужно, чтобы гиперссылки в письме ссылались на правильный сервер \(по умолчанию они всегда будут отправлять на localhost\)\. 

Данные параметры можно задать в файле настроек сервера SonarQube, расположенном по пути `sonarqube\conf\sonar.properties`\.

Чтобы проверить подключение к почте, можно отправить тестовое письмо в разделе **Test Configuration**\.

![SonarQube_ru/image18.png](https://import.viva64.com/docx/blog/SonarQube_ru/image18.png)

После настройки отправителя каждый пользователь может выбрать нужные оповещения\. Для этого нужно перейти в раздел **My Account \> Notifications**\. Есть различные типы оповещений, которые может выбрать пользователь\. Отдельно можно выбрать оповещения для каждого проекта\.

![SonarQube_ru/image19.png](https://import.viva64.com/docx/blog/SonarQube_ru/image19.png)

## Рекомендации и ограничения

1. Сервер SonarQube по умолчанию удаляет сообщения, закрытые более 30 дней назад\. Мы рекомендуем отключить эту функцию, чтобы по истечению длительного периода времени \(года, например\) иметь возможность проанализировать, сколько сообщений, найденных PVS\-Studio, было исправлено;
1. Если в файле `sonar-project.properties` определены модули, и у вас есть отдельный отчёт анализатора для каждого модуля, то необходимо объединить отчёты в один с помощью утилиты PlogConverter и указать отчёт один раз в `sonar.pvs-studio.reportPath`\.
1. Для анализа проектов MSBuild разработчики SonarQube рекомендуют использовать [SonarQube Scanner for MSBuild](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner-for-dotnet/)\. Этот сканер представляет собой обертку над стандартным [сканером SonarQube](https://docs.sonarqube.org/latest/analyzing-source-code/scanners/sonarscanner/) и облегчает процесс создания конфигурационного файла сканера _sonar\-project\.properties_, автоматически добавляя в него модули \(проекты в решении\) и записывая пути до исходных файлов, которые необходимо проанализировать\. Однако мы столкнулись с ограничениями, из\-за которых для сложных проектов создаются некорректные конфигурационные файлы, поэтому для импорта результатов анализа PVS\-Studio мы рекомендуем использовать стандартный сканер SonarQube\.
1. Все исходные файлы для анализа должны располагаться на одном диске\. Это ограничение налагается платформой SonarQube\. Исходные файлы, расположенные на дисках, отличных от диска, указанного в свойстве `sonar.projectBaseDir`, не будут проиндексированы, и сообщения, найденные в этих файлах, будут проигнорированы\.