﻿# Знакомство со статическим анализатором PVS\-Studio для Java

На протяжении многих лет команда PVS\-Studio развивает одноименный статический анализатор\. На данный момент анализатор представляет собой сложное программное решение и предоставляет возможность анализа таких языков программирования, как C, C\+\+, C\# и Java на платформах Windows, Linux и macOS\. Совсем недавно в ряд поддерживаемых языков программирования была добавлена поддержка языка Java\. Если анализатор PVS\-Studio за долгие годы уже зарекомендовал себя среди C\+\+ и C\# разработчиков, то для Java\-аудитории PVS\-Studio еще новичок\.  Многие даже не слышали про анализатор, а кто слышал, тот мало знаком со всеми его возможностями\. Поэтому в этой статье хотелось бы познакомить вас с PVS\-Studio Java, рассказать о способах запуска и его возможностях\. 

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

## Общие сведения

Статический анализатор кода PVS\-Studio Java состоит из двух основных частей: ядра, выполняющего анализ, и плагинов для интеграции в сборочные системы \(Gradle, Maven\) и IDE \(IntelliJ IDEA\)\.

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

Также есть возможность запускать анализатор напрямую, перечислив исходники и classpath\.

Анализ можно проводить, если ваш компьютер удовлетворяет следующим системным требованиям:

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

## Плагин для Maven

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

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

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

Перед тем, как запустить анализ, необходимо ввести лицензионные данные:

```cpp
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\.

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

```cpp
$ mvn pvsstudio:pvsAnalyze
```

В блоке _<analyzer\>_ можно производить настройку анализатора\. Список всех настроек можно посмотреть [здесь](https://pvs-studio.ru/ru/docs/manual/6703/)\.

## Плагин для Gradle

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

```cpp
buildscript {
  repositories {
    mavenCentral()
    maven {
      url uri('http://files.pvs-studio.com/java/pvsstudio-maven-repository/')
    }
  }
  dependencies {
    classpath group: 'com.pvsstudio',
              name: 'pvsstudio-gradle-plugin',
              version: '{VERSION_PVS_JAVA}'
  }
}
```



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

Перед тем, как запустить анализ, необходимо ввести лицензионные данные:

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

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

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

```cpp
$ ./gradlew pvsAnalyze
```

В блоке 'pvsstudio' можно производить настройку анализатора\. Список всех настроек можно посмотреть [здесь](https://pvs-studio.ru/ru/docs/manual/6703/)\.

## Плагин для IntelliJ IDEA

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

Плагин PVS\-Studio для IDEA можно установить из:

* [официального репозитория плагинов JetBrains](https://plugins.jetbrains.com/plugin/12263-pvs-studio-for-idea-and-android-studio/);
* из репозитория на сайте viva64\.com;
* через установщик PVS\-Studio для Windows, доступный на [странице загрузки](https://pvs-studio.ru/ru/pvs-studio/download/)\.

После того, как Вы установили плагин, необходимо ввести лицензионные данные:

1\) Analyze \-\> PVS\-Studio \-\> Settings

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

2\) Вкладка Registration:

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

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

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

## Лицензирование

Анализатор PVS\-Studio ориентирован на команды разработчиков и по сути является проприетарным B2B продуктом\. Чтобы ознакомиться с возможностями анализатора, вы можете [запросить триальный ключ](https://pvs-studio.ru/ru/pvs-studio/download/)\.

Если вы развиваете открытые проекты, или, например, являетесь студентом, то вы можете воспользоваться одним из бесплатных [вариантов](https://pvs-studio.ru/ru/blog/posts/0614/) лицензирования PVS\-Studio\.

## Подавление ложных предупреждений

Для борьбы с ложными срабатываниями в анализаторе предусмотрен набор различных механизмов:

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

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

2\. При помощи [suppress файла](https://pvs-studio.ru/ru/docs/manual/0032/)\.

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

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

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

## Заключение

То, что мы сейчас рассмотрели \- только малая часть того, о чем можно было рассказать\. Например, существует возможность интеграции с SonarQube и так далее\. PVS\-Studio Java \- молодое направление, которое активно развивается:

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

Чтобы полностью изучить существующие возможности анализатора и в дальнейшем не упустить появление новых, читайте [блог](https://pvs-studio.ru/ru/blog/posts/) PVS\-Studio\.