Использование пользовательских детекторов с плагином FindBugs Maven - PullRequest
5 голосов
/ 09 августа 2010

У меня есть хороший 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.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

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

<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, существует опция конфигурации именно для этого варианта использования.

2 голосов
/ 09 августа 2010

Я узнал, что это возможно, хотя через довольно много взлома.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>
...