Как запустить PVS-Studio Java
- Системные требования
- Плагин для Maven
- Плагин для Gradle
- Плагин для IntelliJ IDEA
- Использование ядра анализатора напрямую
- Интеграция PVS-Studio с Continuous Integration системами и SonarQube
- Подавление сообщений анализатора
- Просмотр интересных предупреждений анализатора
- Обновление PVS-Studio Java
- Описание распространённых проблем и их решение
Статический анализатор кода 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
2) Manage Plugin Repositories

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

4) Install
Далее нужно ввести лицензию. О том, как это сделать, подробно написано в документации.
После этого можно запустить анализ текущего проекта:

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

Некоторым действиям из этого меню назначены горячие клавиши, что позволяет выполнять их без использования мыши.
Кнопки со стрелками, предназначенные для навигации по сообщениям анализатора, также имеют своё сочетание клавиш:
- перейти к следующему сообщению: 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 плагина, а так же в качестве параметра при прямом запуске ядра анализатора.

При подавлении сообщения через IDEA, suppress файл будет создан в директории .PVS-Studio, расположенной в директории открытого в IDE проекта, с именем suppress_base.json;
3. При помощи аннотаций @SuppressWarnings(....)
Анализатор знает о некоторых аннотациях и может не выдавать предупреждения на код, который уже был размечен. Например:
@SuppressWarnings("OctalInteger")
void f() {
int x = 01000;
}
Просмотр интересных предупреждений анализатора
Если Вы только начали изучать инструмент статического анализа и хотели бы узнать на что он способен, то можете воспользоваться механизмом Best Warnings. Данный механизм покажет вам наиболее важные и достоверные предупреждения.
Чтобы посмотреть наиболее интересные предупреждения с точки зрения анализатора, нажмите на кнопку 'Best', как показано на скриншоте ниже:

После чего в таблице с результатами анализа останутся максимум десять наиболее критичных предупреждений анализатора.
Обновление 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 сообщение об этом выведется в отчет при запуске анализа.

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

Использование прокси
Если вы пользуетесь прокси необходимо указать логин и пароль, для того чтобы скачать или обновить ядро. Это можно сделать через аргументы:
- -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
Обычно объема памяти по умолчанию может не хватать при анализе сгенерированного кода с большим количеством вложенных конструкций.
Возможно стоит исключить этот код из анализа (с помощью 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
Не удается запустить анализ (возникают ошибки V00X)
В случае если не удается запустить анализ, пожалуйста, напишите нам в поддержку (support@viva64.com) и приложите текстовые файлы из директории .PVS-Studio (находится в директории с проектом).