Tuesday, 1 May 2012

Analysing Ant Project with Jenkins and Sonar

Jenkins(or Hudson) and Sonar are perhaps two of the most mature open source tools available today for implementing continuous integration. They comes with a plethora of features that make life easier at monitoring and managing quality of multiple software development projects. Out of the box, Sonar is designed for Maven project. However, it can be configured to work with Ant projects. The following steps show you how to achieve this:

1. Download this plugin Sonar Ant Jar
2. Copy the jar file into <ANT_HOME>/lib

This is very important, otherwise your project would not compile properly.

Ant projects typically come with <PROJECT>.properties and <PROJECT>.xml files. So, just add the following code snippets into the existing ant build file. The code snippets assume that Sonar has already been installed to run at http://localhost:8080/sonar with Postgresql database.

myproject.properties #Application Information
app.prettyName=My Project

# Sonar configuration

# For Linux
# ant.home=/usr/local/ant

# ForWindows

<project name="My Project - Build" default="compile" basedir=".">
     <!-- Define the properties file -->
     <property file="myproject_build.properties"/>

     <!-- Sonar database configuration -->
     <property name="sonar.jdbc.url" value="${sonar.db.url}" />
     <property name="sonar.jdbc.driverClassName" value="${sonar.db.driverClass}" />
     <property name="sonar.jdbc.username" value="${sonar.db.username}" />
     <property name="sonar.jdbc.password" value="${sonar.db.password}" />

     <!-- Sonar url -->
     <property name="sonar.host.url" value="${sonar.web.url}" />

     <!-- Add the Sonar task -->
     <target name="sonar" depends="compile" description="Sonar static code analysis" >
         <taskdef name="sonar" classname="org.sonar.ant.SonarTask"
                       classpath="${ant.home}/lib/sonar-ant-task-1.3.jar" />
         <!-- list of mandatories Sonar properties -->
         <property name="sonar.sources" value="${src.home}" />

         <!-- list of optional Sonar properties -->
         <property name="sonar.projectName" value="${app.prettyName}" />
         <property name="sonar.binaries" value="${build.all}" />
         <property name="sonar.tests" value="${test.home}" />
             <path id="sonar.libraries">
                 <path refid="compile.classpath"/>
         <sonar key="${artifact.id}" version="${app.version}" />

From the command prompt or inside your favourite IDE, run "ant -f myproject.xml sonar". This will take awhile depending on your project size. Once completed, myproject should show up on the project list inside Sonar.

Integrating with Jenkins/Hudson
Under "configure" panel, just add a new ant task to execute the "sonar" task.

1. For more details on Ant Task, see Analyse with Ant Task 
2. For more details on Jenkins, see Jenkins 
3. For more details on Sonar, see Sonar


  1. Hi I am using sonarqube-5.3,apache-ant-1.9.4 and Java 7 while I am running "ant -f myapp.xml sonar" I am ending up with below exception please help me out in resolving the issue..

    Caused by: java.io.FileNotFoundException: <>\.sonar\batch\sonar-batch-shaded-5.3.jar|3659a1916b6b99eb1f6567db76884fcd
    (The filename, directory name, or volume label syntax is incorrect)

  2. Thanks to the author for the work done! I love when it is so clearly set out useful information
    Richard Brown virtual data room cost comparison

  3. The information shared was very much useful My sincere thanks for sharing this post Please continue to share this post
    Devops Training in Bangalore

  4. very well Explained Ant Project with
    installation, configuration and run also References Of jenkins/hudsons
    Thank you...
    Devops Training