Использование пользовательских детекторов с плагином FindBugs Maven

У меня есть хороший JAR-файл с некоторыми пользовательскими детекторами FindBugs, которые я хотел бы использовать с плагином FindBugs Maven. Есть способ сделать это с помощью плагина с помощью параметра конфигурации <pluginList>, но он принимает только локальные файлы, URL-адреса или ресурсы.

Единственный способ, который я нашел для этого, - это каким-то образом скопировать мой JAR в локальный файл (возможно, через плагин Dependency), а затем настроить плагин FindBugs примерно так:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
        <pluginList>${project.build.directory}/my-detectors.jar</pluginList>
    </configuration>
</plugin>

Но это не очень гибко. Есть ли способ использовать функции управления зависимостями Maven вместе с плагинами FindBugs? Я бы хотел использовать что-то вроде этого:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.lptr.findbugs</groupId>
            <artifactId>my-detectors</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</plugin>

... но это просто отменяет core детекторы FindBugs.


person Lóránt Pintér    schedule 09.08.2010    source источник


Ответы (2)


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

Параметр <pluginList> может принимать путь к локальному файлу, URL-адрес или ресурс (т. Е. Что-то из пути к классам). Что бы вы ему ни дали, указанный файл будет скопирован в target/<filename> и передан в сам FindBugs. Вы можете передать FindBugs файл JAR, если вы создаете файл JAR, содержащий ваш файл JAR. Этого можно добиться в проекте my-detectors с помощью подключаемого модуля Assembly с таким дескриптором:

<assembly>
    <id>doublepack</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <files>
        <file>
            <source>${project.build.directory}/${project.build.finalName}.jar</source>
            <destName>my-detectors.jar</destName>
        </file>
    </files>
</assembly>

Единственная другая проблема, которую необходимо решить, заключается в том, что плагин FindBugs (по крайней мере, версия 2.3.1) использует устаревшую версию Plexus ResourceManager, которая неправильно извлекает my-detectors.jar, поэтому вам придется «обновить» и его. Теперь ваши кастомные детекторы будут работать с этим:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <configuration>
        <pluginList>my-detectors.jar</pluginList>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-resources</artifactId>
            <version>1.0-alpha-7</version>
        </dependency>
        <dependency>
            <groupId>com.lptr.findbugs</groupId>
            <artifactId>my-detectors</artifactId>
            <version>1.0</version>
            <classifier>doublepack</classifier>
        </dependency>
    </dependencies>
</plugin>
person Lóránt Pintér    schedule 09.08.2010

Другой обходной путь - указать путь к плагину в вашем локальном репозитории. Существует свойство для вашего пути к локальному репозиторию, поэтому его можно будет переносить.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
        <pluginList>${settings.localRepository}/path/to/plugin/1.0-SNAPSHOT/artifact-1.0-SNAPSHOT.jar</pluginList>
    </configuration>
</plugin>

Обновление. Начиная с версии 2.4.1 плагина findbugs maven существует вариант конфигурации именно для этого варианта использования.

person Jörn Horstmann    schedule 24.02.2011
comment
Из-за нового git: gleclaire.github.io/findbugs-maven- плагин / - person Josh; 11.01.2017