to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
Как запустить PVS-Studio Java
menu mobile close menu
Проверка проектов
Сообщения PVS-Studio
Диагностики общего назначения (General Analysis, C++)
Диагностики общего назначения (General Analysis, C#)
Диагностики общего назначения (General Analysis, Java)
Диагностика микро-оптимизаций (C++)
Диагностика 64-битных ошибок (Viva64, C++)
Реализовано по запросам пользователей (C++)
Cтандарт MISRA
Стандарт AUTOSAR
Стандарт OWASP (C#)
Проблемы при работе анализатора кода
Дополнительная информация
toggle menu Оглавление

Как запустить PVS-Studio Java

25 Ноя 2021

Статический анализатор кода PVS-Studio Java состоит из 2-х основных частей: ядра, выполняющего анализ и плагинов для интеграции в сборочные системы и IDE.

Плагины получают структуру проекта (наборы исходных файлов и classpath), после чего передают эту информацию в ядро. Кроме того, плагины отвечают за развёртывание ядра для анализа - оно будет автоматически установлено при первом запуске.

Анализатор имеет несколько различных способов интеграции в проект.

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

  • Операционная система: Windows, Linux, macOS;
  • Минимальная версия Java для запуска анализатора: Java 8 (64-битная). Примечание: Анализируемый проект может использовать любую версию Java;
  • Минимальная версия IntelliJ IDEA: 2017.2 (опционально);

Плагин для Maven

Для проектов со сборочной системой Maven можно воспользоваться плагином pvsstudio-maven-plugin. Для этого необходимо добавить следующее в файл pom.xml:

<pluginRepositories>
  <pluginRepository>
    <id>pvsstudio-maven-repo</id>
    <url>https://files.pvs-studio.com/java/pvsstudio-maven-repository/</url>
  </pluginRepository>
</pluginRepositories>

<build>
  <plugins>
    <plugin>
      <groupId>com.pvsstudio</groupId>
      <artifactId>pvsstudio-maven-plugin</artifactId>
      <version>7.23.69221</version>
      <configuration>
        <analyzer>
          <outputType>text</outputType>
          <outputFile>path/to/output.txt</outputFile>
        </analyzer>
      </configuration>
    </plugin>
  </plugins>
</build>

Далее вам необходимо ввести лицензию указанным в документации способом. После этого можно запустить анализ:

mvn pvsstudio:pvsAnalyze

Кроме того, анализ можно включить в цикл сборки проекта, добавив элемент execution:

<plugin>
  <groupId>com.pvsstudio</groupId>
  <artifactId>pvsstudio-maven-plugin</artifactId>
  <version>7.23.69221</version>
  <executions>
    <execution>
      <phase>compile</phase>
      <goals>
        <goal>pvsAnalyze</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Конфигурация

В блоке <analyzer> производится настройка анализатора. Ниже представлен список настроек анализатора.

  • <outputFile>PATH</outputFile> - путь до файла с отчетом анализатора. Значение по умолчанию: ${basedir}/PVS-Studio. Примечание: для отчета в формате 'fullhtml' в outputFile необходимо указать директорию, в которой будет создана папка с именем 'fullhtml' с отчетом анализатора. Значение по умолчанию: ${basedir}/fullhtml;
  • <outputType>TYPE</outputType> - формат отчета анализатора (text, log, json, xml, tasklist, html, fullhtml, errorfile). Значение по умолчанию: json;
  • <threadsNum>NUMBER</threadsNum> - число потоков анализа. Значение по умолчанию: число доступных процессоров;
  • <sourceTreeRoot>PATH</sourceTreeRoot> - корневая часть пути, которую анализатор будет использовать при генерации относительных путей в диагностических сообщениях. Значение по умолчанию отсутствует;
  • <analysisMode>GA, ....</analysisMode> - список активных групп диагностических правил. Доступные группы: GA (правила общего назначения), OWASP (правила согласно OWASP ASVS). Значение по умолчанию: GA;
  • <enabledWarnings>V6XXX, ....</enabledWarnings> - список активных диагностик. При задании включённых диагностик, не указанные здесь будут отключены. Значение по умолчанию отсутствует. При отсутствии значения данного параметра все диагностики считаются включенными (если дополнительно не задан параметр disabledWarnings);
  • <disabledWarnings>V6XXX, ....</disabledWarnings> - список выключенных диагностик. При задании отключённых диагностик, не указанные здесь будут считаться включёнными. Значение по умолчанию отсутствует. При отсутствии данного параметра все диагностики считаются включёнными (если дополнительно не задан параметр enabledWarnings);
  • <additionalWarnings>V6XXX, ....</additionalWarnings> - список выключенных по умолчанию диагностик, которые будут добавлены к анализу. Значение по умолчанию отсутствует;
  • <exclude>PATH, ....</exclude> - список файлов и/или директорий, которые нужно исключить из анализа (абсолютные или относительные пути). Значение по умолчанию отсутствует. При отсутствии данного параметра будут проанализированы все файлы (если дополнительно не задан параметр analyzeOnly);
  • <analyzeOnly>PATH, ....</analyzeOnly> - список файлов и/или директорий, которые нужно проанализировать (абсолютные или относительный пути). Значение по умолчанию отсутствует. При отсутствии данного параметра будут проанализированы все файлы (если дополнительно не задан параметр exclude);
  • <suppressBase>PATH</suppressBase> - путь до suppress файла, содержащего подавленные сообщения анализатора, которые не будут выданы в отчёте об анализе. Добавить сообщения в suppress файл можно через интерфейс PVS-Studio IDE плагина для IntelliJ IDEA. Значение по умолчанию: ${basedir}/.PVS-Studio/suppress_base.json;
  • <failOnWarnings>BOOLEAN</failOnWarnings> - флаг, позволяющий завершить задачу pvsAnalyze неудачей, если анализатор выдал какое-либо предупреждение. Значение по умолчанию: false;
  • <incremental>BOOLEAN</incremental> - запускать ли анализ инкрементально (в этом режиме анализируются только изменившиеся файлы). Значение по умолчанию: false;
  • <forceRebuild>BOOLEAN</forceRebuild> - флаг, позволяющий принудительно перестроить целиком закэшированную метамодель программы, содержащую информацию о её структуре и типах данных. Значение по умолчанию: false.
  • <disableCache>BOOLEAN</disableCache> - флаг, позволяющий отключить кэширование метамодели программы. Значение по умолчанию: false;
  • <timeout>NUMBER</timeout> - таймаут анализа одного файла (в минутах). Значение по умолчанию: 10;
  • <verbose>BOOLEAN</verbose> - флаг, позволяющий сохранять временные файлы анализатора для его диагностирования. Значение по умолчанию: false;
  • <javaPath>PATH</javaPath> - путь до java интерпретатора, с которыми будет запускаться ядро анализатора. Значение по умолчанию: java из переменной окружения PATH;
  • <jvmArguments>FLAG, ....</jvmArguments> - дополнительные флаги JVM, с которыми будет запускаться ядро анализатора. Значение по умолчанию: -Xss64m;
  • <compatibility>BOOLEAN</compatibility> - флаг, позволяющий активировать диагностическое правило V6078, которое обнаруживает потенциальные проблемы совместимости API между выбранными версиями Java SE;
  • <sourceJava>NUMBER</sourceJava> - версия Java SE, на которой разработано ваше приложение;
  • <targetJava>NUMBER</targetJava> - версия Java SE, на совместимость с которой вы хотите проверить API, используемое в вашем приложении (sourceJava);
  • <excludePackages>"PACK", ....</excludePackages> - пакеты, которые вы хотите исключить из анализа совместимости.

Конфигурирование через командную строку

Помимо конфигурирования блока <analyzer> в pom.xml можно определять настройки анализатора через командную строку. Формат определения:

-Dpvsstudio.<nameSingleParam>=value 
-Dpvsstudio.<nameMultipleParam>=value1;value2;value3

Пример:

mvn pvsstudio:pvsAnalyze -Dpvsstudio.outputType=text
                         -Dpvsstudio.outputFile=path/to/output.txt
                         -Dpvsstudio.disabledWarnings=V6001;V6002;V6003

Важно! При определении параметров через командную строку стоит учесть, что параметры, явно прописанные в командной строке при запуске анализа, имеют приоритет перед параметрами, которые указаны при конфигурировании блока <analyzer> в pom.xml.

Плагин для Gradle

Для проектов со сборочной системой Gradle можно воспользоваться плагином pvsstudio-gradle-plugin. Для этого необходимо добавить следующее в файл build.gradle:

buildscript {
  repositories {
    mavenCentral()
    maven {
      url uri('https://files.pvs-studio.com/java/pvsstudio-maven-repository/')
    }
  }
  dependencies {
    classpath 'com.pvsstudio:pvsstudio-gradle-plugin:7.23.69221'
  }
}

apply plugin: com.pvsstudio.PvsStudioGradlePlugin
pvsstudio {
  outputType = 'text'
  outputFile = 'path/to/output.txt'
}

Далее вам необходимо ввести лицензию указанным в документации способом. После этого можно запустить анализ:

./gradlew pvsAnalyze

Конфигурация

В блоке "pvsstudio" производится настройка анализатора. Ниже представлен список настроек анализатора.

  • outputFile = "PATH" - путь до файла с отчетом анализатора. Значение по умолчанию: $projectDir/PVS-Studio. Примечание: для отчета в формате 'fullhtml' в outputFile необходимо указать директорию, в которой будет создана папка с именем 'fullhtml' с отчетом анализатора. Значение по умолчанию: $projectDir/fullhtml;
  • outputType = "TYPE" - формат отчета анализатора (text, log, json, xml, tasklist, html, fullhtml, errorfile). Значение по умолчанию: json;
  • threadsNum = NUMBER - число потоков анализа. Значение по умолчанию: число доступных процессоров;
  • sourceTreeRoot = "PATH" - корневая часть пути, которую анализатор будет использовать при генерации относительных путей в диагностических сообщениях. Значение по умолчанию отсутствует;
  • analysisMode = ["GA", ....] - список активных групп диагностических правил. Доступные группы: GA (правила общего назначения), OWASP (правила согласно OWASP ASVS). Значение по умолчанию: GA;
  • enabledWarnings = ["V6XXX", ....] - список активных диагностик. При задании включённых диагностик, не указанные здесь будут отключены. Значение по умолчанию отсутствует. При отсутствии значения данного параметра все диагностики считаются включенными (если дополнительно не задан параметр disabledWarnings);
  • disabledWarnings = ["V6XXX", ....] - список выключенных диагностик. При задании отключённых диагностик, не указанные здесь будут считаться включёнными. Значение по умолчанию отсутствует. При отсутствии данного параметра все диагностики считаются включёнными (если дополнительно не задан параметр enabledWarnings);
  • additionalWarnings = ["V6XXX", ....] - список выключенных по умолчанию диагностик, которые будут добавлены к анализу. Значение по умолчанию отсутствует;
  • exclude = ["PATH", ....] - список файлов и/или директорий, которые нужно исключить из анализа (абсолютные или относительные пути). Значение по умолчанию отсутствует. При отсутствии данного параметра будут проанализированы все файлы (если дополнительно не задан параметр analyzeOnly);
  • analyzeOnly = ["PATH", ....] - список файлов и/или директорий, которые нужно проанализировать (абсолютные или относительный пути). Значение по умолчанию отсутствует. При отсутствии данного параметра будут проанализированы все файлы (если дополнительно не задан параметр exclude);
  • suppressBase = "PATH" - путь до suppress файла, содержащего подавленные сообщения анализатора, которые не будут выданы в отчёте об анализе. Добавить сообщения в suppress файл можно через интерфейс PVS-Studio IDE плагина для IntelliJ IDEA. Значение по умолчанию: $projectDir/.PVS-Studio/suppress_base.json;
  • failOnWarnings = BOOLEAN - флаг, позволяющий завершить задачу pvsAnalyze неудачей, если анализатор выдал какое-либо предупреждение. Значение по умолчанию: false;
  • incremental = BOOLEAN - запускать ли анализ инкрементально (в этом режиме анализируются только изменившиеся файлы). Значение по умолчанию: false;
  • forceRebuild = BOOLEAN - флаг, позволяющий принудительно перестроить целиком закэшированную метамодель программы, содержащую информацию о её структуре и типах данных. Значение по умолчанию: false;
  • disableCache = BOOLEAN - флаг, позволяющий отключить кэширование метамодели программы. Значение по умолчанию: false;
  • timeout = NUMBER - таймаут анализа одного файла (в минутах). Значение по умолчанию: 10;
  • verbose = BOOLEAN - флаг, позволяющий сохранять временные файлы анализатора для его диагностирования. Значение по умолчанию: false;
  • javaPath = "PATH" - путь до java интерпретатора, с которыми будет запускаться ядро анализатора. Значение по умолчанию: java из переменной окружения PATH;
  • jvmArguments = ["FLAG", ....] - дополнительные флаги JVM, с которыми будет запускаться ядро анализатора. Значение по умолчанию: ["-Xss64m"];
  • compatibility = BOOLEAN - флаг, позволяющий активировать диагностическое правило V6078, которое обнаруживает потенциальные проблемы совместимости API между выбранными версиями Java SE;
  • sourceJava = NUMBER - версия Java SE, на которой разработано ваше приложение;
  • targetJava = NUMBER - версия Java SE, на совместимость с которой вы хотите проверить API, используемое в вашем приложении (sourceJava);
  • excludePackages = ["PACK", ....] - пакеты, которые вы хотите исключить из анализа совместимости.

Конфигурирование через командную строку

Помимо конфигурирования блока 'pvsstudio' в build.gradle можно определять настройки анализатора через командную строку. Формат определения:

-Ppvsstudio.<nameSingleParam>=value 
-Ppvsstudio.<nameMultipleParam>=value1;value2;value3

Пример:

./gradlew pvsAnalyze -Ppvsstudio.outputType=text
                     -Ppvsstudio.outputFile=path/to/output.txt
                     -Ppvsstudio.disabledWarnings=V6001;V6002;V6003

Важно! При определении параметров через командную строку стоит учесть, что параметры, явно прописанные в командной строке при запуске анализа, имеют приоритет перед параметрами, которые указаны при конфигурировании блока 'pvsstudio' в build.gradle.

Плагин для IntelliJ IDEA

Анализатор PVS-Studio Java можно также использовать в виде плагина к IntelliJ IDEA. В таком случае разбор структуры проекта производится средствами этой IDE, а плагин предоставляет удобный графический интерфейс для работы с анализатором.

Плагин PVS-Studio для IDEA можно установить из официального репозитория плагинов JetBrains или из репозитория на нашем сайте. Ещё один способ установки (включая ядро анализатора) - через установщик PVS-Studio для Windows, доступный на странице загрузки.

Ниже приведен порядок установки плагина из нашего репозитория.

1) File -> Settings -> Plugins

PVS-Studio_Java_ru/image1.png

2) Manage Plugin Repositories

PVS-Studio_Java_ru/image3.png

3) Add repository (https://files.pvs-studio.com/java/pvsstudio-idea-plugins/updatePlugins.xml)

PVS-Studio_Java_ru/image4.png

4) Install

PVS-Studio_Java_ru/image5.png

Далее нужно ввести лицензию. О том, как это сделать, подробно написано в документации.

После этого можно запустить анализ текущего проекта:

PVS-Studio_Java_ru/image7.png

Горячие клавиши PVS-Studio в IntelliJ IDEA

Плагин для IntelliJ IDEA добавляет окно просмотра результатов анализа PVS-Studio, которое имеет контекстное меню, появляющееся при нажатии правой кнопки мыши:

PVS-Studio_Java_ru/image8.png

Некоторым действиям из этого меню назначены горячие клавиши, что позволяет выполнять их без использования мыши.

Кнопки со стрелками, предназначенные для навигации по сообщениям анализатора, также имеют своё сочетание клавиш:

  • перейти к следующему сообщению: Alt + ];
  • перейти к предыдущему сообщению: Alt + [.

Использование сочетаний полезно, поскольку они позволяют ускорить просмотр результатов анализа. Вы можете назначить или переопределить их в настройках: File -> Settings -> Keymap. Чтобы быстрее находить сочетания клавиш, введите 'PVS-Studio' в поле поиска окна Keymap.

Использование ядра анализатора напрямую

В случае, если ни один из приведенных выше способов интеграции в проект не подходит, можно использовать ядро анализатора напрямую. Ядро анализатора можно установить через установщик PVS-Studio для Windows (доступный на странице загрузки) или скачать по ссылке: https://files.pvs-studio.com/java/pvsstudio-cores/7.23.69221.zip

Если вы будете устанавливать анализатор через установщик PVS-Studio для Windows, то ядро будет скачано в %APPDATA%/PVS-Studio-Java/7.23.69221.

Чтобы получить информацию про все доступные аргументы анализатора, необходимо выполнить команду '--help':

java -jar pvs-studio.jar --help

Рассмотрим основные аргументы анализатора:

  • --src (-s) - набор *.java файлов или директорий для анализа. При необходимости перечисления нескольких файлов/директорий в качестве разделителя используется ' '. Пример: --src "path/to/file1" "path/to/file2" "path/to/dir";
  • --ext (-e) - определение classpath (.jar/.class файлы, директории). При необходимости перечисления нескольких сущностей classpath в качестве разделителя используется ' '. Пример: --ext "path/to/file.jar" "path/to/dirJars";
  • --ext-file - путь до файла с classpath. В качестве разделителя classpath используется pathSeparator (разделитель ':' в Unix системах и ';' в Windows);
  • --output-file (-o) - путь до файла, в который будут записаны результаты анализа. Значение по умолчанию: {currentDir}/PVS-Studio.json. Примечание: для отчета в формате 'fullhtml' в outputFile необходимо указать директорию, в которой будет создана папка с именем 'fullhtml' с отчетом анализатора. Значение по умолчанию: {currentDir}/fullhtml;
  • --output-type (-O) - формат вывода (text, log, json, xml, tasklist, html, fullhtml, errorfile);
  • --incremental (-i) - анализ только измененных файлов;
  • --threads (-j) - число потоков анализа. Значение по умолчанию: число доступных процессоров;
  • --cfg (-c) - конфигурационный файл для запуска ядра.
  • --help (-h) – печать на экран справочной информации.
  • --sourcetree-root - корневая часть пути, которую анализатор будет использовать при генерации относительных путей в диагностических сообщениях. Значение по умолчанию отсутствует;
  • --force-rebuild - флаг, позволяющий принудительно перестроить целиком закэшированную метамодель программы, содержащую информацию о её структуре и типах данных;
  • --disable-cache - флаг, позволяющий отключить кэширование метамодели программы;
  • --exclude - список файлов и/или директорий, которые нужно исключить из анализа (абсолютные или относительные пути). При необходимости перечисления нескольких файлов/директорий в качестве разделителя используется ' '. Пример: --exclude "path/to/file1" "path/to/file2" "path/to/dir";
  • --include - список файлов и/или директорий, которые нужно проанализировать (абсолютные или относительный пути). При необходимости перечисления нескольких файлов/директорий в качестве разделителя используется ' '. Пример: --include "path/to/file1" "path/to/file2" "path/to/dir";
  • --analysis-mode - список активных групп диагностических правил. Доступные группы: GA (правила общего назначения), OWASP (правила согласно OWASP ASVS). При необходимости перечисления нескольких групп в качестве разделителя используется ' '. Пример: --analysis-mode GA OWASP. Значение по умолчанию: GA;
  • --disabled-warnings - список выключенных диагностик. При задании отключённых диагностик, не указанные здесь будут считаться включёнными. При необходимости перечисления нескольких правил в качестве разделителя используется ' '. Пример: --disabled-warnings V6001 V6002 V6003;
  • --enabled-warnings - список активных диагностик. При задании включённых диагностик, не указанные здесь будут отключены. При необходимости перечисления нескольких правил в качестве разделителя используется ' '. Пример: --enabled-warnings V6001 V6002 V6003;
  • --additional-warnings - список выключенных по умолчанию диагностик, которые будут добавлены к анализу. При необходимости перечисления нескольких правил в качестве разделителя используется ' '. Пример: --additional-warnings V6001 V6002 V6003;
  • --suppress-base - путь до suppress файла, содержащего подавленные сообщения анализатора, которые не будут выданы в отчёте об анализе;
  • --timeout - таймаут анализа одного файла (в минутах). Значение по умолчанию: 10;
  • --username - имя пользователя;
  • --serial-number - серийный номер лицензии;
  • --license-path - путь до файла с лицензией. Примечание: если 'username' и 'serial-number' пустые, то анализатор будет проверять информацию о лицензии в %APPDATA%/PVS-Studio-Java/PVS-Studio.lic в ОС Windows или в ~/.config/PVS-Studio-Java/PVS-Studio.lic в macOS и Linux.
  • --compatibility - флаг, позволяющий активировать диагностическое правило V6078, которое обнаруживает потенциальные проблемы совместимости API между выбранными версиями Java SE;
  • --source-java - версия Java SE, на которой разработано ваше приложение;
  • --target-java - версия Java SE, на совместимость с которой вы хотите проверить API, используемое в вашем приложении (--source-java);
  • --exclude-packages - пакеты, которые вы хотите исключить из анализа совместимости. При необходимости перечисления нескольких пакетов в качестве разделителя используется ' '. Пример: --exclude-packages "package1" "package2" "package3";
  • --fail-on-warnings - флаг, позволяющий вернуть ненулевой код, если анализатор выдал какое-либо предупреждение;
  • --convert - запуск в режиме конвертации. Режимы: 'toFullhtml' - преобразует отчет с предупреждениями в формат 'fullhtml', 'toSuppress' - преобразует отчет с предупреждениями в формат файла подавления;
  • --src-convert – путь до отчета анализатора с предупреждениями (*.json);
  • --dst-convert - Назначение конвертации (файл для 'toSuppress', директория для 'toFullhtml');

Анализатору для работы необходим набор исходных файлов (или директорий с исходными файлами) для анализа, а так же classpath, чтобы корректно построить метамодель программы.

Примеры быстрого запуска:

java -jar pvs-studio.jar -s A.java B.java C.java -e Lib1.jar Lib2.jar -j4 
-o report.txt -O text -username name someName –serial-number someSerial

java -jar pvs-studio.jar -s src/main/java --ext-file classpath.txt -j4 
-o report.txt -O text --license-path PVS-Studio.lic

Чтобы каждый раз не писать все необходимые параметры в командной строке можно воспользоваться параметром '--cfg'. Для этого необходимо создать файл со следующим содержимым:

{
  "src": ["A.java", "B.java", "C.java"],
  "threads": 4,
  "output-file": "report.txt",
  "output-type": "text",
  "username": "someName",
  "serial-number": "someSerial"
  ....
}

Или

{
  "src": ["src/main/java"],
  "threads": 4,
  "ext-file": "classpath.txt", 
  "output-file": "report.txt",
  "output-type": "text",
  "license-path": "PVS-Studio.lic"
  ....
}

В таком случае запуск анализатора сведётся к следующей строке:

java -jar pvs-studio.jar –-cfg cfg.json

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

Интеграция PVS-Studio с Continuous Integration системами и SonarQube

Любой из перечисленных способов интеграции анализатора в сборочную систему можно использовать для автоматизированного анализа в Continuous Integration системах. Это можно сделать в Jenkins, TeamCity и других, настроив автоматический запуск анализа и уведомление о найденных ошибках.

Также возможна интеграция с платформой непрерывного контроля качества SonarQube с помощью плагина PVS-Studio. Инструкция по настройке доступна на странице: "Интеграция результатов анализа PVS-Studio в SonarQube".

Подавление сообщений анализатора

Имеется несколько способов подавления сообщений анализатора.

1. При помощи специальных комментариев:

void f() {
    int x = 01000; //-V6061
}

2. При помощи suppress файла

Создать suppress файл можно через интерфейс PVS-Studio IDE плагина для IntelliJ IDEA. Путь до suppress файла можно указать в качестве параметра maven или gradle плагина, а так же в качестве параметра при прямом запуске ядра анализатора.

PVS-Studio_Java_ru/image9.png

При подавлении сообщения через IDEA, suppress файл будет создан в директории .PVS-Studio, расположенной в директории открытого в IDE проекта, с именем suppress_base.json;

3. При помощи аннотаций @SuppressWarnings(....)

Анализатор знает о некоторых аннотациях и может не выдавать предупреждения на код, который уже был размечен. Например:

@SuppressWarnings("OctalInteger")
void f() {
    int x = 01000;
}

Просмотр интересных предупреждений анализатора

Если Вы только начали изучать инструмент статического анализа и хотели бы узнать на что он способен, то можете воспользоваться механизмом Best Warnings. Данный механизм покажет вам наиболее важные и достоверные предупреждения.

Чтобы посмотреть наиболее интересные предупреждения с точки зрения анализатора, нажмите на кнопку 'Best', как показано на скриншоте ниже:

PVS-Studio_Java_ru/image10.png

После чего в таблице с результатами анализа останутся максимум десять наиболее критичных предупреждений анализатора.

Обновление PVS-Studio Java

Плагин для Maven

Для обновления pvsstudio-maven-plugin необходимо изменить версию плагина в файле pom.xml. Актуальная версия плагина: 7.23.69221.

<build>
  <plugins>
    <plugin>
      <groupId>com.pvsstudio</groupId>
      <artifactId>pvsstudio-maven-plugin</artifactId>
      <version>7.23.69221</version>
      <configuration>
        <analyzer>
          <outputType>text</outputType>
          <outputFile>path/to/output.txt</outputFile>
        </analyzer>
      </configuration>
    </plugin>
  </plugins>
</build>

Плагин для Gradle

Для обновления pvsstudio-gradle-plugin необходимо изменить версию плагина в файле build.gradle. Актуальная версия плагина: 7.23.69221.

buildscript {
  repositories {
    mavenCentral()
    maven {
      url uri('https://files.pvs-studio.com/java/pvsstudio-maven-repository/')
    }
  }
  dependencies {
    classpath 'com.pvsstudio:pvsstudio-gradle-plugin:7.23.69221'
  }
}

Плагин для IntelliJ IDEA

В случае наличия обновления PVS-Studio сообщение об этом выведется в отчет при запуске анализа.

PVS-Studio_Java_ru/image11.png

Для обновления плагина нужно открыть окно настроек плагинов File -> Settings -> Plugins, найти в списке Installed плагин PVS-Studio for IDEA and Android Studio, нажать Update и перезапустить среду разработки.

PVS-Studio_Java_ru/image12.png

Использование прокси

Если вы пользуетесь прокси необходимо указать логин и пароль, для того чтобы скачать или обновить ядро. Это можно сделать через аргументы:

  • -Dhttp.proxyUser, -Dhttp.proxyPassword
  • -Dhttps.proxyUser, -Dhttps.proxyPassword
  • -Djava.net.socks.username, -Djava.net.socks.password
  • -Dftp.proxyUser, -Dftp.proxyPassword

Команда для запуска анализа через плагин для Maven с прокси:

mvn pvsstudio:pvsAnalyze "-Dhttp.proxyUser=USER" "-Dhttp.proxyPassword=PASS"

Команда для запуска анализа через плагин для Gradle с прокси:

./gradlew pvsAnalyze "-Dhttp.proxyUser=USER" "-Dhttp.proxyPassword=PASS"

Описание распространённых проблем и их решение

Возникает "GC overhead limit exceeded" или завершение анализа по таймауту

Проблему нехватки памяти можно решить увеличением доступного объема памяти и стека.

В плагине для Maven:

<jvmArguments>-Xmx4096m, -Xss256m</jvmArguments>

В плагине для Gradle:

jvmArguments = ["-Xmx4096m", "-Xss256m"]

В плагине для IntelliJ IDEA:

1) Analyze -> PVS-Studio -> Settings

2) Вкладка Environment -> JVM arguments

PVS-Studio_Java_ru/image13.png

Обычно объема памяти по умолчанию может не хватать при анализе сгенерированного кода с большим количеством вложенных конструкций.

Возможно стоит исключить этот код из анализа (с помощью exclude), чтобы не тратить на него лишнее время.

Как изменить версию Java для запуска анализатора?

По умолчанию анализатор запускает ядро с java из переменной окружения PATH. Если необходимо запустить анализ с какой-то другой версией, ее можно указать вручную.

В плагине для Maven:

<javaPath>C:/Program Files/Java/jdk1.8.0_162/bin/java.exe</javaPath>

В плагине для Gradle:

javaPath = "C:/Program Files/Java/jdk1.8.0_162/bin/java.exe"

В плагине для IntelliJ IDEA:

1) Analyze -> PVS-Studio -> Settings

2) Вкладка Environment -> Java executable

PVS-Studio_Java_ru/image13.png

Не удается запустить анализ (возникают ошибки V00X)

В случае если не удается запустить анализ, пожалуйста, напишите нам в поддержку (support@viva64.com) и приложите текстовые файлы из директории .PVS-Studio (находится в директории с проектом).

Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо