Saturday, January 14, 2012

How to add Findbugs and Checkstyle plugins to your maven3 build


Findbugs and Checkstyle are two awesome tools that help to maintain the quality of your code discovering anti patterns or bad smells.Normally we can run those two tools with the help of IDE but there are possibilities that developers may be ignorant about them.So how about adding them to the normal maven build so developers are forced to correct their mistakes. There are different level of sympathetic levels that you can have :) with this integration.You can break the build if you find any Findbug violations and use SVN blame to find who broke the build :D . I am leaving that part to you and introduce basic integration of those essential power tools to Maven build system. I am using maven3 so all assumptions are based on that.

Adding Findbugs

You can find the maven plugin page here.[1]. Under the project Reports–> plugin documentation you can find all the configuration so that you can customize to your own requirements.
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>2.3.3</version>
    <configuration>
        <trace>false</trace>
        <effort>Max</effort>
        <threshold>Low</threshold>
        <xmlOutput>true</xmlOutput>
        <failOnError>false</failOnError>
    </configuration>
    <executions>
        <execution>
            <phase>verify</phase>
            <goals>
                <goal>findbugs</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
This will execute in verify phase before install phase. Since you need to verify your source code before compiling it is the most suitable phase to run.If you search you will find lot more resources how this can be adjusted easily so you can integrate this into report generation and add to the Maven site.
There is another cool hack that i have found in this.[2].This Groovy script will print all the lines and summary to your build log with line number .class name and message.
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<plugin>
      <groupId>org.codehaus.groovy.maven</groupId>
      <artifactId>gmaven-plugin</artifactId>
      <version>1.0</version>
      <executions>
          <execution>
              <phase>install</phase>
              <goals>
                  <goal>execute</goal>
              </goals>
              <configuration>
                  <source>
                      def file = new File("${project.build.directory}/findbugsXml.xml")
                      if (!file.exists()) {
                      log.warn("Findbugs XML report is absent: " + file.getPath())
                      }
                      def xml = new XmlParser().parse(file)
                      def bugs = xml.BugInstance
                      def total = bugs.size()
                      if (total &gt; 0) {
                      log.info("Total bugs: " + total)
                      for (i in 0..total-1) {
                      def bug = bugs[i]
                      log.info("\n"+
                      bug.LongMessage.text()
                      + " " + bug.Class.'@classname'
                      + " " + bug.Class.SourceLine.Message.text()
                      +"\n")
                      }
                      }
                  </source>
              </configuration>
          </execution>
      </executions>
  </plugin>

 Adding Checkstyle

This assumes that you have added a custom checkstyle configuration file(checkstyle.xml) to your projects path directly.If you do not specify a checkstyle configuration file configuration provided by  Sun Microsystems Definition is selected by default.
You can read all the available configuration details from plugin page[3].
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-checkstyle-plugin</artifactId>
     <version>2.8</version>
     <configuration>
         <consoleOutput>true</consoleOutput>
         <configLocation>checkstyle.xml</configLocation>
         <propertyExpansion>basedir=${project.basedir}</propertyExpansion>
     </configuration>
     <executions>
         <execution>
             <phase>verify</phase>
             <goals>
                 <goal>checkstyle</goal>
             </goals>
         </execution>
     </executions>
 </plugin>
 <plugin>
If you have a multi modules insert this under plugin management and add the plugin entry to   child POMs.

4 comments:

  1. do dự mà móc ra một viên Hồi Nguyên đan nhét vào trong miệng, ở trong Cực Viêm địa, phục dụng đến hai viên Hồi Nguyên đan khiến Nhạc Thành tiếc nuối không thôi.

    - Thái Dương Chân Hỏdongtam
    mu private
    tim phong tro
    http://nhatroso.com/
    nhac san cuc manh
    tổng đài tư vấn luật
    http://dichvu.tuvanphapluattructuyen.com/
    văn phòng luật
    tổng đài tư vấn luật
    dịch vụ thành lập công ty
    http://we-cooking.com/
    chém gió
    trung tâm ngoại ngữa, trở về cho ta.

    Thủ ấn của Nhạc Thành ngưng kết, sau khi phục dụng Hồi Nguyên đan, sắc mặt của hắn trở nên hồng hào không ít.

    Ngọn lửa của Nhạc Thành hiện tại không còn là Vô Thượng Chân Hỏa nữa mà chính là Thái Dương Chân Hỏa, một luồng Thái Dương Chân Hỏa này tuy không bằng Thái Dương Chân Hỏa chính thức nhưng uy lực vẫn ở trên Vô Thượng Chân Hỏa.

    Một ngọn lửa vượt không gian bao vây lấy ngọn lửa kia, hai ngọn lửa không ngừng đấu tranh, một lát sau đã trở nên an tĩnh,/

    Bản thể của Thái Dương Chân Hỏa tạo thành ba bàn tay lửa, uy lực khủng bố vô cùng, tuy nhiên hiện tại linh trí của Thái Dương Chân Hỏa đã bị Nhạc Thành luyện hóa, Thái Dương Chân Hỏa hiện tại giống như là một hài nhi mới sinh vậy, cảm nhân thấy khí tức ngọn lửa xong quanh cũng cảm thấy thân cận.

    ReplyDelete
  2. Truyen ngon tinh hay la the loai truyen tinh cam
    Truyen teen hay la nhung truyen tinh yeu tuoi teen
    Don doc tai trang doc truyen online.

    ReplyDelete