Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

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


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

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

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

15 июля 2019 г.

Статический анализатор кода 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>http://files.viva64.com/java/pvsstudio-maven-repository/</url>
  </pluginRepository>
</pluginRepositories>

<build>
  <plugins>
    <plugin>
      <groupId>com.pvsstudio</groupId>
      <artifactId>pvsstudio-maven-plugin</artifactId>
      <version>7.12.46137</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.12.46137</version>
  <executions>
    <execution>
      <phase>compile</phase>
      <goals>
        <goal>pvsAnalyze</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Ввод лицензии

Чтобы ввести данные лицензии можно воспользоваться следующей командой:

mvn pvsstudio:pvsCredentials "-Dpvsstudio.username=USR" "-Dpvsstudio.serial=KEY"

После этого информация о лицензии будет сохранена в %APPDATA%/PVS-Studio-Java/PVS-Studio.lic в ОС Windows или в ~/.config/PVS-Studio-Java/PVS-Studio.lic в macOS и Linux.

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

В блоке <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('http://files.viva64.com/java/pvsstudio-maven-repository/')
    }
  }
  dependencies {
    classpath 'com.pvsstudio:pvsstudio-gradle-plugin:7.12.46137'
  }
}

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

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

$ ./gradlew pvsAnalyze

Ввод лицензии

Чтобы ввести данные лицензии можно воспользоваться следующей командой:

./gradlew pvsCredentials "-Ppvsstudio.username=USR" "-Ppvsstudio.serial=KEY"

После этого информация о лицензии будет сохранена в %APPDATA%/PVS-Studio-Java/PVS-Studio.lic в ОС Windows или в ~/.config/PVS-Studio-Java/PVS-Studio.lic в macOS и Linux.

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

В блоке "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 (http://files.viva64.com/java/pvsstudio-idea-plugins/updatePlugins.xml)

PVS-Studio_Java_ru/image4.png

4) Install

PVS-Studio_Java_ru/image5.png

После этого нужно ввести данные лицензии.

1) Analyze -> PVS-Studio -> Settings

PVS-Studio_Java_ru/image7.png

2) Вкладка Registration:

PVS-Studio_Java_ru/image9.png

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

PVS-Studio_Java_ru/image11.png

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

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

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

Чтобы получить информацию про все доступные аргументы анализатора, необходимо выполнить команду '--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;
  • --disable-warnings - список выключенных диагностик. При задании отключённых диагностик, не указанные здесь будут считаться включёнными. При необходимости перечисления нескольких правил в качестве разделителя используется ' '. Пример: --disable-warnings V6001 V6002 V6003;
  • --enable-warnings - список активных диагностик. При задании включённых диагностик, не указанные здесь будут отключены. При необходимости перечисления нескольких правил в качестве разделителя используется ' '. Пример: --enable-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/image13.png

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

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

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

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

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

Возникает "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/image14.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/image14.png

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

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

Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять