Статический анализ не претендует на звание панацеи от всех возможных ошибок, он позволяет выявить логические и стилистические ошибки в тех ветках кода, которые не покрыты юнит тестами.
Как показал опыт, некоторые ошибки жили в коде годами. Не исключены ложные срабатывания, так что надо все отчеты внимательно сверять с исходниками. Я проверял пока только проприетарный исходный код заказчика, поэтому примеров привести не смогу, ибо неразглашение 🙂 Но могу сказать, что попадались ошибки, когда строки сравнивались не по значению, а по адресу памяти ( == вместо equals()). Еще удалось обнаружить неиспользуемые переменные/функции (private метод может быть использован только внутри класса) и даже класс.
Если вы хотите задействовать findbug у себя в проекте, то в parent POM нужно сделать вставку:
<build>
<plugins>
…
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.4</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.8</version>
<reports>
<report>index</report>
</reports>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<argLine>-Xmx256m</argLine>
<argLine>-XX:MaxPermSize=256m</argLine>
<timeout>240000</timeout>
<effort>max</effort>
<failOnError>true</failOnError>
</configuration>
</plugin>
</reportPlugins>
</configuration>
</plugin>
…
</plugins>
</build> |
<build>
<plugins>
…
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.4</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.8</version>
<reports>
<report>index</report>
</reports>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<argLine>-Xmx256m</argLine>
<argLine>-XX:MaxPermSize=256m</argLine>
<timeout>240000</timeout>
<effort>max</effort>
<failOnError>true</failOnError>
</configuration>
</plugin>
</reportPlugins>
</configuration>
</plugin>
…
</plugins>
</build>
Величина тайм аута в примере 240000, для больших пакетов и модулей ее надо увеличивать. Данная вставка сгенерирует индексную страницу и отчет по проблемам в исходном коде. Плагин maven-project-info-reports-plugin позволяет получать множество разнообразных отчетов, к примеру отчет о внешних зависимостях. Если вы хотите больше отчетов, сделайте такую правку (но помните, что увеличится время сборки):
<reports>
<report>index</report>
<report>project-team</report>
<report>license</report>
<report>mailing-list</report>
<report>dependencies</report>
<report>dependency-convergence</report>
<report>plugin-management</report>
<report>cim</report>
<report>issue-tracking</report>
<report>scm</report>
<report>summary</report>
</reports> |
<reports>
<report>index</report>
<report>project-team</report>
<report>license</report>
<report>mailing-list</report>
<report>dependencies</report>
<report>dependency-convergence</report>
<report>plugin-management</report>
<report>cim</report>
<report>issue-tracking</report>
<report>scm</report>
<report>summary</report>
</reports>
Для активации плагина maven-site-plugin просто добавьте в команде мавена "site" после install.
Предупреждение "[WARNING] No project URL defined - decoration links will not be relativized!" некритично для генерации отчетов (просто плагин не сможет сделать их доступными по HTTP). Если плагин site не создает отчеты, то скорее всего из-за того, что не в том месте parent POM сделана вставка, которую я привел первой.
[sc:social_networks ]