Задача муравья Findbugs, отправляющая несколько динамически обнаруженных файлов JAR для анализа - PullRequest
3 голосов
/ 07 ноября 2011

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

Проект разбит на множество подмодулей, расположенных в разных местах. Для других инструментов анализа (JDepend, Google Testability Explorer и т. Д.) Я динамически обнаружил все файлы JAR сборки в элементе path следующим образом:

<path id="built-libs">
  <fileset dir="${overall-base}">
    <include name="${some-common-base}/**/lib/*.jar" />
  </fileset>
</path>
<property name="built-libs-string" refid="built-libs" />

Для некоторых инструментов я использую build-libs, для других - строку (в форме classpath; x.jar;y.jar).

Проблема в том, что FindBugs использует совершенно другой формат, чем любой другой;

<class location="x.jar"/>
<class location="y.jar"/>
...

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

Другая сложность заключается в том, что я также хочу запускать отчеты в Jenkins, в этом случае каталог извлечения для отдельных модулей будет зависеть от задания, которое ранее создавало модуль (конвейерные сборки, модули, извлеченные из SCM и построенные параллельно, отчетность происходит в конце трубопровода).

I может вызвать ОС для запуска FindBugs, передавая JAR-файлы в виде списка, разделенного пробелами (как в Вызов FindBugs из Ant: передача списка файлов, разделенных пробелами в Ява ). Тем не менее, я предпочитаю, решение Ant, взломать OS <exec....

Примечание Я знаю, что у меня есть похожая проблема для элемента sourcepath, однако я предполагаю, что решение проблемы элемента class также решает проблему sourcepath.

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

В идеале FindBugs должен принимать коллекцию ресурсов , а не отдельные элементы class. Я не знаком с FindBugs, поэтому не могу прокомментировать, почему они выбрали маршрут элемента class вместо коллекции ресурсов, однако ваш комментарий об использовании exec подразумевает, что использование коллекции ресурсов является допустимым альтернатива конструкции.

Я бы попробовал развернуть свой собственный макрос Ant , который напрямую вызывает FindBugs с помощью задачи java . Это должно дать вам необходимый контроль и избежать избыточности, которую привнесет задача Ant FindBugs.

Другой вариант (который является уродливым хакером) - использовать fileset для записи файла мини-муравья с целью FindBugs, которую вы затем вызываете с помощью задачи ant . вздрагивает

0 голосов
/ 20 апреля 2017

Задача Ant Findbugs позволяет указать список файлов, который можно использовать для указания нескольких файлов. Цитирование из документации Findbugs

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

Пример, который включает все jar-файлы в $ {lib.dir}:

<findbugs home="${findbugs.home}" output="xml" outputFile="findbugs.xml" >
    <auxClasspath path="${basedir}/lib/Regex.jar" />
    <sourcePath path="${basedir}/src/java" />
    <fileset dir="${lib.dir}">
       <include name="*.jar"/>
    </fileset>
</findbugs>
...