2010-10-27 17 views
9

Mam wiele ustawień projektu, używając Maven i wtyczki Findbugs. Muszę wykluczyć niektóre pliki z jednego z projektów podrzędnych, więc dodałem go do findbugs-exclude.xml. To działa, gdy buduję w podprojekcie.Wtyczka FindBugs Maven - findbugs-exclude z wieloma projektami

Mój problem pojawia się, gdy próbuję budować na najwyższym poziomie. Maven nie znajduje findbugs-exclude.xml w podprojekcie. Więc nie ignoruje moich błędów i z nich nie korzysta. Mogę umieścić mój findbugs-exclude.xml w katalogu najwyższego poziomu, a wykluczenie działa. Ale to zanieczyszcza najwyższy poziom i nie będzie postrzegany pozytywnie.

Czy istnieje sposób na pobranie wtyczki Maven do korzystania z pliku findbugs-exclude.xml z podkatalogu? Najlepiej przy minimalnej lub zerowej zmianie na najwyższym poziomie?

+0

żadnych trafień na to pytanie? Znajduję się z tą samą potrzebą, próbując uzyskać odniesienie do pliku wykluczenia umieszczonego w projekcie podrzędnym z nadrzędnego pliku pom –

+0

Nie, nadal nie mam dobrego rozwiązania. Na razie właśnie aktualizuję pliki w obu miejscach. Naruszenie SUCHIA, fuj. –

Odpowiedz

2

Jednym z rozwiązań jest to, aby stworzyć projekt oddzielna który zawiera findbugs-excludes.xml a następnie użyć wtyczki zależnościach rozpakować i umieścić go na miejscu, gdzie jest to wymagane coś takiego:

<profile> 
    <id>static-analysis</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>unpack-findbugs</id> 
         <phase>process-resources</phase> 
         <goals> 
          <goal>unpack</goal> 
         </goals> 
         <configuration> 
          <artifactItems> 
           <artifactItem> 
            <groupId>com.myproject</groupId> 
            <artifactId>my-findbugs</artifactId> 
            <version>0.1-SNAPSHOT</version> 
            <type>jar</type> 
            <overWrite>true</overWrite> 
            <outputDirectory>src/main/findbugs/</outputDirectory> 
           </artifactItem> 
          </artifactItems> 
          <!-- other configurations here --> 
          <excludes>META-INF/</excludes> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>findbugs-maven-plugin</artifactId> 
       <configuration> 
        <xmlOutput>true</xmlOutput> 
        <!-- Optional directory to put findbugs xdoc xml report --> 
        <xmlOutputDirectory>target/findbugs</xmlOutputDirectory> 
        <effort>Max</effort> 
        <threshold>Low</threshold> 
        <excludeFilterFile>src/main/findbugs/findbugs-excludes.xml</excludeFilterFile> 
       </configuration> 
       <executions> 
        <execution> 
         <id>findbugs-run</id> 
         <phase>compile</phase> 
         <goals> 
          <goal>check</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</profile> 

Z tego podejdź do tego, możesz podzielić się tym plikiem wykluczeń na projekty, jeśli jest to wymagane, co może być dobre lub złe w zależności od tego, jak na to spojrzysz :) Również, myśląc o tym, jeśli masz dedykowany projekt projektu findbugs, możesz stworzyć różne smaki wykluczenia za pomocą klasyfikatorów i użycie określonego klasyfikatora w zależności od kontekstu. Nie jest doskonały, ale działa dla mnie.

HTH, James

2

Oto co robię w moim obecnym projekcie, stawia findbugs-exclude.xml w projekcie dominującej (co wiem, nie chcesz), ale to rozwiązuje problem DRY utrzymanie go w dwóch miejscach. Jest to prostsze niż rozpakowywanie, ale wymaga, aby pełna struktura projektu była lokalna. (Myślę, że rozwiązanie do rozpakowywania byłoby użyteczne, aby użyć tej samej konfiguracji w wielu projektach, tak jak w środowisku korporacyjnym.)

Przechowuję moją konfigurację findbugs w parent/src/main/resources/shared/findbugs-exclude.xml, ale tak długo jak jest ona w macierzystym, określony katalog nie robi ' Nieważne.

Następnie używać właściwości opisać lokalizację katalogu „dzielonego”:

<properties> 
    <myproject.parent.basedir>${project.parent.basedir}</myproject.parent.basedir> 
    <myproject.parent.shared.resources>${myproject.parent.basedir}/src/main/resources/shared</myproject.parent.shared.resources> 
</properties> 

i odniesienie tych właściwości podczas konfigurowania findbugs w dominującej:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>findbugs-maven-plugin</artifactId> 
    <configuration> 
     <excludeFilterFile>${myproject.parent.shared.resources}/findbugs-exclude.xml</excludeFilterFile> 
    </configuration> 
    ... 
</plugin> 

wszystkie bezpośrednie projektów dziecko będzie teraz uruchom findbugs, odwołując się do pliku konfiguracyjnego w rodzicu. Jeśli masz wiele poziomów zagnieżdżania projektów, będziesz musiał zastąpić myproject.parent.basedir w podrzędnej. Na przykład, jeśli masz rodzica < - sub-rodzica < - dziecko, by umieścić:

<properties> 
    <myproject.parent.basedir>${project.parent.parent.basedir}</myproject.parent.basedir> 
</properties> 
0

Lepszą alternatywą dla przyjętego odpowiedź jest użycie Maven-remote-resources-plugin. Lubię podejście Jamesa, ale musisz zmodyfikować czystą wtyczkę, aby usunąć rozpakowane pliki z folderu src.

Zgodnie z propozycją Jamesa stwórz osobny projekt, który zawiera findbugi-wykluczenia.xml i dodać następujące do swojego pliku pom:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-remote-resources-plugin</artifactId> 
      <version>1.5</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>bundle</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <includes> 
        <include>**/*.*</include> 
       </includes> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

zaktualizować plik zawierający findbugs pom wtyczki:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-remote-resources-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
     <execution> 
      <id>process-remote-resources</id> 
      <goals> 
       <goal>process</goal> 
      </goals> 
      <configuration> 
       <resourceBundles> 
        <resourceBundle>com.myproject:myartifactid:version</resourceBundle> 
       </resourceBundles> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>findbugs-maven-plugin</artifactId> 
    <configuration> 
     ... 
     ... 
     <excludeFilterFile>${project.build.directory}/maven-shared-archive-resources/findbugs-exclude.xml</excludeFilterFile> 
     ...   
    </configuration> 
</plugin> 

Nie zapomnij zmienić com.myproject: myartifactid: wersja

maven-remote-resources-plugin kopiuje twoje udostępnione pliki do folderu docelowego, więc nie ma potrzeby zmiany domyślnego zachowania wtyczki maven-clean-plugin.

0

Jeśli nie masz wielu plików/pakietów do wykluczenia, po prostu pomiń niektóre ostrzeżenia - spróbuj użyć adnotacji @SuppressFBWarning. To powinno działać nawet z wieloma projektami modułowymi, a adnotacje można dodawać w określonych projektach i plikach w razie potrzeby.

Zależności dla @SuppressFBWarning

<dependency> 
     <groupId>com.google.code.findbugs</groupId> 
     <artifactId>annotations</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.google.code.findbugs</groupId> 
     <artifactId>jsr305</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
Powiązane problemy