Плагин Hudson's FindBugs сообщает об ошибке «-1» для ошибок. Идеи? - PullRequest
0 голосов
/ 14 апреля 2010

Привет,
У меня есть простой тестовый проект, настроенный в Hudson, и процесс сборки проекта (командный файл) генерирует файл findbugs.xml. Это обрабатывается плагином FindBugs Хадсона, но показывает номер строки ошибок как «-1» вместо их фактического номера строки. Коллега предложил мне включить отладочную информацию для компилятора. Я использовал опцию -g «Генерировать всю информацию отладки» для javac, но ничего не изменилось. Моя команда сборки:

javac -g -classpath C:\testWebApp1\src -d C:\testWebApp1\build C:\testWebApp1\src\*.java

Единственное, что еще есть в файле build.bat - это вызов инструмента FindBug (текстовый интерфейс). Вот что плагин FindBugs говорит о первой ошибке:

File: GenerateHellos.java, Line: -1, Type: UUF_UNUSED_FIELD, Priority: Normal, Category: PERFORMANCE

Есть идеи? Спасибо за тонну!

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Это половина ответа:

В этом классе объявлено неиспользуемое поле. FindBugs использует статический анализ байтового кода для поиска ошибок; К сожалению, формат байтового кода не хранит номера строк для полей класса или члена, поэтому FindBugs не может на самом деле сообщить номер строки. Должен быть какой-то переключатель, который позволит ему выводить более полезную информацию (то есть имя поля), но я понятия не имею.

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


Еще немного покопался, и похоже, что это, вероятно, ошибка в инспекторе для этого шаблона ошибок. Предполагая, что ваш прогон FindBugs сконфигурирован с n подходящим исходным каталогом (то есть с использованием -sourcepath), большинство найденных ошибок должно иметь номера строк, связанные с ними. Чтобы проверить это, откройте выведенный отчет. Вы должны увидеть элементы, подобные следующим:

<!-- skipping a bit -->
<BugInstance type="...">
    <Class classname="com.example.MyClass">
        <!-- ... -->
    </Class>
    <!-- ... -->
    <SourceLine classname="com.example.MyClass" start="5" end="5" sourcefile="MyClass.java"/>
</BugInstance>

Ключом является <SourceLine classname="..."/>, который сообщает номер строки, на которой была обнаружена ошибка. Для многих других проверок, включая проверки непрочитанных полей и нескольких других случаев, когда в байтовом коде нет номеров строк, эта строка заполняется правильно, но не для UUF_UNUSED_FIELD. Следовательно, плагин Hudson делает разумную вещь и сообщает о line = -1.

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

Нет исправлений, но, надеюсь, это прояснит, что происходит.

0 голосов
/ 15 апреля 2010

Вы почти там с -g. Findbugs основан на анализе байт-кода и зависит от отладочной информации, содержащейся в файлах классов, ваш коллега прав в этом.

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

...