You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by as...@apache.org on 2007/05/15 06:01:51 UTC

svn commit: r538052 - in /incubator/ode/trunk: Rakefile tasks/cobertura.rake

Author: assaf
Date: Mon May 14 21:01:50 2007
New Revision: 538052

URL: http://svn.apache.org/viewvc?view=rev&rev=538052
Log:
Added tasks to create Corbertura coverage reports

Added:
    incubator/ode/trunk/tasks/cobertura.rake
Modified:
    incubator/ode/trunk/Rakefile

Modified: incubator/ode/trunk/Rakefile
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/Rakefile?view=diff&rev=538052&r1=538051&r2=538052
==============================================================================
--- incubator/ode/trunk/Rakefile (original)
+++ incubator/ode/trunk/Rakefile Mon May 14 21:01:50 2007
@@ -1,6 +1,7 @@
-gem "buildr", "1.0.0"
-require "buildr"
-require "buildr/xmlbeans"
+#gem "buildr", "1.1.0"
+#require "buildr"
+require "buildr/lib/buildr"
+require "buildr/xmlbeans.rb"
 require "buildr/openjpa"
 require "buildr/javacc"
 require "buildr/jetty"
@@ -100,7 +101,10 @@
 end
 
 desc "Apache ODE"
-define "ode", :group=>"org.apache.ode", :version=>VERSION_NUMBER do
+#define "ode", :group=>"org.apache.ode", :version=>VERSION_NUMBER do
+define "ode" do
+  project.version = VERSION_NUMBER
+  project.group = "org.apache.ode"
 
   compile.options.source = "1.5"
   compile.options.target = "1.5"
@@ -109,12 +113,12 @@
 
   desc "ODE Axis Integration Layer"
   define "axis2" do
-    compile.with projects("ode:bpel-api", "ode:bpel-connector", "ode:bpel-dao", "ode:bpel-epr", "ode:bpel-runtime",
-      "ode:bpel-scheduler-quartz", "ode:bpel-schemas", "ode:bpel-store", "ode:utils"),
+    compile.with projects("bpel-api", "bpel-connector", "bpel-dao", "bpel-epr", "bpel-runtime",
+      "bpel-scheduler-quartz", "bpel-schemas", "bpel-store", "utils"),
       AXIOM, AXIS2, COMMONS.logging, COMMONS.collections, DERBY, GERONIMO.kernel, GERONIMO.transaction,
       JAVAX.activation, JAVAX.servlet, JAVAX.stream, JAVAX.transaction, JENCKS, WSDL4J, XMLBEANS
 
-    test.with project("ode:tools"), XERCES, WOODSTOX, AXIOM, WS_COMMONS.xml_schema, JAVAX.javamail
+    test.with project("tools"), XERCES, WOODSTOX, AXIOM, WS_COMMONS.xml_schema, JAVAX.javamail
     test.exclude '*'
 
     package :jar
@@ -122,10 +126,10 @@
 
   desc "ODE Axis2 Based Web Application"
   define "axis2-war" do
-    libs = projects("ode:axis2", "ode:bpel-api", "ode:bpel-compiler", "ode:bpel-connector", "ode:bpel-dao",
-      "ode:bpel-epr", "ode:bpel-obj", "ode:bpel-ql", "ode:bpel-runtime", "ode:bpel-scheduler-quartz",
-      "ode:bpel-schemas", "ode:bpel-store", "ode:dao-hibernate", "ode:jacob", "ode:jca-ra", "ode:jca-server",
-      "ode:utils", "ode:dao-jpa"),
+    libs = projects("axis2", "bpel-api", "bpel-compiler", "bpel-connector", "bpel-dao",
+      "bpel-epr", "bpel-obj", "bpel-ql", "bpel-runtime", "bpel-scheduler-quartz",
+      "bpel-schemas", "bpel-store", "dao-hibernate", "jacob", "jca-ra", "jca-server",
+      "utils", "dao-jpa"),
       AXIS2_ALL, ANNONGEN, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.fileupload, COMMONS.httpclient,
       COMMONS.lang, COMMONS.logging, COMMONS.pool, DERBY, DERBY_TOOLS, JAXEN, JAVAX.activation, JAVAX.ejb, JAVAX.javamail,
       JAVAX.connector, JAVAX.jms, JAVAX.persistence, JAVAX.transaction, JAVAX.stream,  JIBX,
@@ -133,10 +137,10 @@
       WOODSTOX, WSDL4J, WS_COMMONS.axiom, WS_COMMONS.neethi, WS_COMMONS.xml_schema, XALAN, XERCES, XMLBEANS
 
     package(:war).with(:libs=>libs).path("WEB-INF").tap do |web_inf|
-      web_inf.merge project("ode:dao-jpa-ojpa-derby").package(:zip)
-      web_inf.merge project("ode:dao-hibernate-db").package(:zip)
-      web_inf.include project("ode:axis2").path_to("src/main/wsdl/*")
-      web_inf.include project("ode:bpel-schemas").path_to("src/main/xsd/pmapi.xsd")
+      web_inf.merge project("dao-jpa-ojpa-derby").package(:zip)
+      web_inf.merge project("dao-hibernate-db").package(:zip)
+      web_inf.include project("axis2").path_to("src/main/wsdl/*")
+      web_inf.include project("bpel-schemas").path_to("src/main/xsd/pmapi.xsd")
     end
     package(:war).tap do |root|
       root.merge(artifact(AXIS2_WAR)).exclude("WEB-INF/*").exclude("META-INF/*")
@@ -158,46 +162,46 @@
 
   desc "ODE APIs"
   define "bpel-api" do
-    compile.with projects("ode:utils", "ode:bpel-obj", "ode:bpel-schemas"), WSDL4J, COMMONS.logging
+    compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, COMMONS.logging
     package :jar
   end
 
   desc "ODE JCA connector"
   define "bpel-api-jca" do
-    compile.with project("ode:bpel-api"), JAVAX.connector
+    compile.with project("bpel-api"), JAVAX.connector
     package :jar
   end
 
   desc "ODE BPEL Compiler"
   define "bpel-compiler" do
-    compile.with projects("ode:bpel-api", "ode:bpel-obj", "ode:bpel-schemas", "ode:utils"),
+    compile.with projects("bpel-api", "bpel-obj", "bpel-schemas", "utils"),
       COMMONS.logging, JAVAX.stream, JAXEN, SAXON, WSDL4J, XALAN, XERCES
-    test.resources { filter(project("ode:bpel-scripts").path_to("src/main/resources")).into(test.resources.target).run }
+    test.resources { filter(project("bpel-scripts").path_to("src/main/resources")).into(test.resources.target).run }
     package :jar
   end
 
   desc "ODE JCA Connector Implementation"
   define "bpel-connector" do
-    compile.with projects("ode:bpel-api", "ode:bpel-api-jca", "ode:bpel-runtime", "ode:jca-ra", "ode:jca-server")
+    compile.with projects("bpel-api", "bpel-api-jca", "bpel-runtime", "jca-ra", "jca-server")
     package :jar
   end
 
   desc "ODE DAO Interfaces"
   define "bpel-dao" do
-    compile.with project("ode:bpel-api")
+    compile.with project("bpel-api")
     package :jar
   end
 
   desc "ODE Interface Layers Common"
   define "bpel-epr" do
-    compile.with projects("ode:utils", "ode:bpel-dao", "ode:bpel-api"),
+    compile.with projects("utils", "bpel-dao", "bpel-api"),
       COMMONS.logging, DERBY, JAVAX.transaction, GERONIMO.transaction, GERONIMO.connector, TRANQL, JAVAX.connector
     package :jar
   end
 
   desc "ODE BPEL Object Model"
   define "bpel-obj" do
-    compile.with project("ode:utils"), SAXON, WSDL4J
+    compile.with project("utils"), SAXON, WSDL4J
     package :jar
   end
 
@@ -206,7 +210,7 @@
     pkg_name = "org.apache.ode.ql.jcc"
     jjtree = jjtree(_("src/main/jjtree"), :in_package=>pkg_name)
     compile.from javacc(jjtree, :in_package=>pkg_name), jjtree
-    compile.with projects("ode:bpel-api", "ode:bpel-compiler", "ode:bpel-obj", "ode:jacob", "ode:utils")
+    compile.with projects("bpel-api", "bpel-compiler", "bpel-obj", "jacob", "utils")
 
     package :jar
   end
@@ -214,11 +218,11 @@
   desc "ODE Runtime Engine"
   define "bpel-runtime" do
     compile.from apt
-    compile.with projects("ode:bpel-api", "ode:bpel-compiler", "ode:bpel-dao", "ode:bpel-obj", "ode:bpel-schemas",
-      "ode:bpel-store", "ode:jacob", "ode:jacob-ap", "ode:utils"),
+    compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas",
+      "bpel-store", "jacob", "jacob-ap", "utils"),
       COMMONS.logging, COMMONS.collections, JAXEN, JAVAX.persistence, JAVAX.stream, SAXON, WSDL4J, XMLBEANS
 
-    test.compile.with projects("ode:bpel-scheduler-quartz", "ode:dao-jpa", "ode:dao-hibernate", "ode:bpel-epr"),
+    test.compile.with projects("bpel-scheduler-quartz", "dao-jpa", "dao-hibernate", "bpel-epr"),
         BACKPORT, COMMONS.pool, COMMONS.lang, DERBY, JAVAX.connector, JAVAX.transaction,
         GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, TRANQL, HSQLDB, JAVAX.ejb,
         LOG4J, XERCES, Buildr::OpenJPA::REQUIRES, QUARTZ, XALAN
@@ -229,7 +233,7 @@
 
   desc "ODE Quartz Interface"
   define "bpel-scheduler-quartz" do
-    compile.with projects("ode:bpel-api", "ode:utils"), COMMONS.collections, COMMONS.logging, JAVAX.transaction, QUARTZ
+    compile.with projects("bpel-api", "utils"), COMMONS.collections, COMMONS.logging, JAVAX.transaction, QUARTZ
     package :jar
   end
 
@@ -246,8 +250,8 @@
 
   desc "ODE Process Store"
   define "bpel-store" do
-    compile.with projects("ode:bpel-api", "ode:bpel-compiler", "ode:bpel-dao", "ode:bpel-obj", "ode:bpel-schemas",
-      "ode:dao-hibernate", "ode:utils"),
+    compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas",
+      "dao-hibernate", "utils"),
       COMMONS.logging, JAVAX.persistence, JAVAX.stream, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J
     compile { open_jpa_enhance }
     resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
@@ -259,12 +263,12 @@
 
   desc "ODE BPEL Tests"
   define "bpel-test" do
-    compile.with projects("ode:bpel-api", "ode:bpel-compiler", "ode:bpel-dao", "ode:bpel-runtime",
-      "ode:bpel-store", "ode:utils", "ode:bpel-epr"),
+    compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-runtime",
+      "bpel-store", "utils", "bpel-epr"),
       DERBY, WSDL4J
 
-    test.with projects("ode:bpel-obj", "ode:dao-jpa", "ode:jacob", "ode:bpel-schemas",
-      "ode:bpel-scripts", "ode:bpel-scheduler-quartz"),
+    test.with projects("bpel-obj", "dao-jpa", "jacob", "bpel-schemas",
+      "bpel-scripts", "bpel-scheduler-quartz"),
       COMMONS.collections, COMMONS.lang, COMMONS.logging, DERBY, JAVAX.connector, JAVAX.persistence,
       JAVAX.stream, JAVAX.transaction, JAXEN, HSQLDB, LOG4J, OPENJPA, SAXON, XERCES, XMLBEANS, XALAN
 
@@ -273,11 +277,11 @@
 
   desc "ODE Hibernate DAO Implementation"
   define "dao-hibernate" do
-    compile.with projects("ode:bpel-api", "ode:bpel-dao", "ode:bpel-ql", "ode:utils"),
+    compile.with projects("bpel-api", "bpel-dao", "bpel-ql", "utils"),
       COMMONS.lang, COMMONS.logging, JAVAX.transaction, HIBERNATE, DOM4J
     resources hibernate_doclet(:package=>"org.apache.ode.daohib.bpel.hobj", :excludedtags=>"@version,@author,@todo")
 
-    test.with project("ode:bpel-epr"), BACKPORT, COMMONS.collections, COMMONS.lang, HSQLDB,
+    test.with project("bpel-epr"), BACKPORT, COMMONS.collections, COMMONS.lang, HSQLDB,
       GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, JAVAX.connector, JAVAX.ejb, SPRING
 
     package :jar
@@ -288,8 +292,8 @@
     predefined_for = lambda { |name| _("src/main/sql/tables_#{name}.sql") }
     properties_for = lambda { |name| _("src/main/sql/ode.#{name}.properties") }
 
-    dao_hibernate = project("ode:dao-hibernate").compile.target
-    bpel_store = project("ode:bpel-store").compile.target
+    dao_hibernate = project("dao-hibernate").compile.target
+    bpel_store = project("bpel-store").compile.target
 
     schemaexport = Hibernate.schemaexport
     export = lambda do |properties, source, target|
@@ -318,7 +322,7 @@
 
   desc "ODE OpenJPA DAO Implementation"
   define "dao-jpa" do
-    compile.with projects("ode:bpel-api", "ode:bpel-dao", "ode:utils"),
+    compile.with projects("bpel-api", "bpel-dao", "utils"),
       COMMONS.collections, COMMONS.logging, JAVAX.connector, JAVAX.persistence, JAVAX.transaction,
       OPENJPA, XERCES
     compile { open_jpa_enhance }
@@ -332,12 +336,12 @@
     partial_sql = file("target/partial.sql"=>derby_xml) do |task|
       mkpath _("target"), :verbose=>false
       Buildr::OpenJPA.mapping_tool :properties=>derby_xml, :action=>"build", :sql=>task.name,
-        :classpath=>projects("ode:bpel-store", "ode:dao-jpa", "ode:bpel-api", "ode:bpel-dao", "ode:utils" )
+        :classpath=>projects("bpel-store", "dao-jpa", "bpel-api", "bpel-dao", "utils" )
     end
     derby_sql = concat(_("target/derby.sql")=>[partial_sql, quartz_sql])
     derby_db = Derby.create(_("target/derby/jpadb")=>derby_sql)
 
-    test.with projects("ode:bpel-api", "ode:bpel-dao", "ode:bpel-obj", "ode:bpel-epr", "ode:dao-jpa", "ode:utils"),
+    test.with projects("bpel-api", "bpel-dao", "bpel-obj", "bpel-epr", "dao-jpa", "utils"),
       BACKPORT, COMMONS.collections, COMMONS.lang, COMMONS.logging, GERONIMO.transaction,
       GERONIMO.kernel, GERONIMO.connector, HSQLDB, JAVAX.connector, JAVAX.ejb, JAVAX.persistence,
       JAVAX.transaction, LOG4J, OPENJPA, XERCES, WSDL4J
@@ -348,7 +352,7 @@
 
   desc "ODE JAva Concurrent OBjects"
   define "jacob" do
-    compile.with projects("ode:utils", "ode:jacob-ap"), COMMONS.logging
+    compile.with projects("utils", "jacob-ap"), COMMONS.logging
     compile.from apt
 
     package :jar
@@ -356,23 +360,22 @@
 
   desc "ODE Jacob APR Code Generation"
   define "jacob-ap" do
-    compile.with Java.tools_jar
     package :jar
   end
 
   desc "ODE JBI Integration Layer"
   define "jbi" do
-    compile.with projects("ode:bpel-api", "ode:bpel-connector", "ode:bpel-dao", "ode:bpel-epr", "ode:bpel-obj",
-      "ode:bpel-runtime", "ode:bpel-scheduler-quartz", "ode:bpel-schemas", "ode:bpel-store", "ode:utils"),
+    compile.with projects("bpel-api", "bpel-connector", "bpel-dao", "bpel-epr", "bpel-obj",
+      "bpel-runtime", "bpel-scheduler-quartz", "bpel-schemas", "bpel-store", "utils"),
       COMMONS.logging, COMMONS.pool, JAVAX.transaction, JBI, LOG4J, WSDL4J, XERCES
 
     package(:jar)
     package(:jbi).tap do |jbi|
       libs = artifacts(package(:jar),
-        projects("ode:bpel-api", "ode:bpel-api-jca", "ode:bpel-compiler", "ode:bpel-connector", "ode:bpel-dao",
-        "ode:bpel-epr", "ode:jca-ra", "ode:jca-server", "ode:bpel-obj", "ode:bpel-ql", "ode:bpel-runtime",
-        "ode:bpel-scheduler-quartz", "ode:bpel-schemas", "ode:bpel-store", "ode:dao-hibernate", "ode:dao-jpa",
-        "ode:jacob", "ode:jacob-ap", "ode:utils"),
+        projects("bpel-api", "bpel-api-jca", "bpel-compiler", "bpel-connector", "bpel-dao",
+        "bpel-epr", "jca-ra", "jca-server", "bpel-obj", "bpel-ql", "bpel-runtime",
+        "bpel-scheduler-quartz", "bpel-schemas", "bpel-store", "dao-hibernate", "dao-jpa",
+        "jacob", "jacob-ap", "utils"),
         ANT, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.dbcp, COMMONS.lang, COMMONS.pool,
         COMMONS.primitives, JAXEN, JAVAX.connector, JAVAX.ejb, JAVAX.jms,
         JAVAX.persistence, JAVAX.stream, JAVAX.transaction, LOG4J, OPENJPA, QUARTZ, SAXON, TRANQL,
@@ -381,37 +384,37 @@
       jbi.component :type=>:service_engine, :name=>"OdeBpelEngine", :description=>self.comment
       jbi.component :class_name=>"org.apache.ode.jbi.OdeComponent", :delegation=>:self, :libs=>libs
       jbi.bootstrap :class_name=>"org.apache.ode.jbi.OdeBootstrap", :libs=>libs
-      jbi.merge project("ode:dao-hibernate-db").package(:zip)
-      jbi.merge project("ode:dao-jpa-ojpa-derby").package(:zip)
+      jbi.merge project("dao-hibernate-db").package(:zip)
+      jbi.merge project("dao-jpa-ojpa-derby").package(:zip)
       jbi.include path_to("src/main/jbi/ode-jbi.properties")
     end
 
-    test.with projects("ode:dao-jpa", "ode:bpel-compiler", "ode:bpel-api-jca", "ode:jca-ra",
-      "ode:jca-server", "ode:jacob"),
+    test.with projects("dao-jpa", "bpel-compiler", "bpel-api-jca", "jca-ra",
+      "jca-server", "jacob"),
       BACKPORT, COMMONS.lang, COMMONS.collections, DERBY, GERONIMO.connector, GERONIMO.kernel,
       GERONIMO.transaction, JAVAX.connector, JAVAX.ejb, JAVAX.persistence, JAVAX.stream,
       JAVAX.transaction, JAXEN, JBI, OPENJPA, QUARTZ, SAXON, SERVICEMIX, SPRING, TRANQL,
       XALAN, XBEAN, XMLBEANS, XSTREAM
     test.junit.using :properties=>{ "jbi.install"=>_("target/smixInstallDir"),  "jbi.examples"=>_("../distro-jbi/src/examples") }
-    test.setup unzip(_("target/smixInstallDir/install/ODE")=>project("ode:dao-jpa-ojpa-derby").package(:zip))
+    test.setup unzip(_("target/smixInstallDir/install/ODE")=>project("dao-jpa-ojpa-derby").package(:zip))
 
   end
 
   desc "ODE JCA Resource Archive"
   define "jca-ra" do
-    compile.with project("ode:utils"), JAVAX.connector
+    compile.with project("utils"), JAVAX.connector
     package :jar
   end
 
   desc "ODE JCA Server"
   define "jca-server" do
-    compile.with projects("ode:jca-ra", "ode:utils"), COMMONS.logging
+    compile.with projects("jca-ra", "utils"), COMMONS.logging
     package :jar
   end
 
   desc "ODE Tools"
   define "tools" do
-    compile.with projects("ode:bpel-compiler", "ode:utils"), ANT, COMMONS.httpclient, COMMONS.logging
+    compile.with projects("bpel-compiler", "utils"), ANT, COMMONS.httpclient, COMMONS.logging
     package :jar
   end
 
@@ -448,7 +451,7 @@
       zip.path("lib").include artifacts(COMMONS.logging, COMMONS.codec, COMMONS.httpclient,
         COMMONS.pool, COMMONS.collections, JAXEN,
         SAXON, LOG4J, WSDL4J, XALAN, XERCES)
-      projects("ode:utils", "ode:tools", "ode:bpel-compiler", "ode:bpel-api", "ode:bpel-obj", "ode:bpel-schemas").
+      project("ode").projects("utils", "tools", "bpel-compiler", "bpel-api", "bpel-obj", "bpel-schemas").
         map(&:packages).flatten.each do |pkg|
         zip.include(pkg.to_s, :as=>"#{pkg.id}.#{pkg.type}", :path=>"lib")
       end
@@ -486,10 +489,6 @@
     end
   end
 
-  javadoc projects("ode:axis2", "ode:bpel-api", "ode:bpel-epr", "ode:tools", "ode:utils",
-    "ode:jca-server", "ode:jca-ra", "ode:jbi", "ode:jacob", "ode:dao-jpa", "ode:dao-hibernate", 
-    "ode:bpel-test", "ode:bpel-store", "ode:bpel-scheduler-quartz", "ode:bpel-runtime", 
-    "ode:bpel-ql", "ode:bpel-epr", "ode:bpel-dao", "ode:bpel-connector", "ode:bpel-connector")
-  package :zip, :classifier=>"docs", :include=>javadoc.target
+  package :zip, :id=>"#{id}-docs", :include=>javadoc(project("ode").projects).target
 
 end

Added: incubator/ode/trunk/tasks/cobertura.rake
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/tasks/cobertura.rake?view=auto&rev=538052
==============================================================================
--- incubator/ode/trunk/tasks/cobertura.rake (added)
+++ incubator/ode/trunk/tasks/cobertura.rake Mon May 14 21:01:50 2007
@@ -0,0 +1,77 @@
+module Cobertura
+
+  class << self
+
+    REQUIRES = ["cobertura:cobertura:jar:1.8", "log4j:log4j:jar:1.2.9", "asm:asm:jar:2.2.1", "oro:oro:jar:2.0.8"]
+
+    def requires()
+      @requires ||= Buildr.artifacts(REQUIRES).each(&:invoke).map(&:to_s)
+    end
+
+    def ant_project()
+      @ant_project ||= Buildr::Ant.executable("cobertura") { |ant|
+        ant.taskdef(:classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties" ) }
+    end
+
+    def report_to(file = nil)
+      File.expand_path(File.join(*["cobertura", file.to_s].compact))
+    end
+
+    def data_file()
+      File.expand_path("cobertura.ser")
+    end
+
+  end
+
+  namespace "cobertura" do
+
+    task "instrument" do
+      Buildr.projects.each do |project|
+        # Instrumented bytecode goes in a different directory.
+        instrumented = project.path_to(:target, "instrumented")
+        unless project.compile.sources.empty?
+          project.compile do
+            ant_project.send "cobertura-instrument", :todir=>instrumented, :datafile=>data_file do
+              fileset(:dir=>project.compile.target.to_s) { include :name=>"**/*.class" }
+            end
+          end
+          # We now have two target directories with bytecode. It would make sense to remove compile.target
+          # and add instrumented instead, but apparently Cobertura only creates some of the classes, so
+          # we need both directories and instrumented must come first.
+          project.test.junit.classpath.unshift file(instrumented)
+          project.test.junit.with requires
+          project.clean { rm_rf instrument, :verbose=>false }
+        end
+      end
+    end
+
+    desc "Run the test cases and produce code coverage reports in #{report_to(:html)}"
+    task "html"=>["instrument", "build"] do
+      puts "Creating test coverage reports in #{report_to(:html)}"
+      projects = Buildr.projects
+      ant_project.send "cobertura-report", :destdir=>report_to(:html), :format=>"html", :datafile=>data_file do
+        projects.map(&:compile).map(&:sources).flatten.each do |src|
+          fileset(:dir=>src.to_s) { include :name=>"**/*.java" } if File.exist?(src.to_s)
+        end
+      end
+    end
+
+    desc "Run the test cases and produce code coverage reports in #{report_to(:xml)}"
+    task "xml"=>["instrument", "build"] do
+      puts "Creating test coverage reports in #{report_to(:xml)}"
+      projects = Buildr.projects
+      ant_project.send "cobertura-report", :destdir=>report_to(:xml), :format=>"xml", :datafile=>data_file do
+        projects.map(&:compile).map(&:sources).flatten.each do |src|
+          fileset :dir=>src.to_s if File.exist?(src.to_s)
+        end
+      end
+    end
+
+    task "clean" do
+      rm_rf [report_to, data_file], :verbose=>false
+    end
+  end
+
+  task "clean"=>"cobertura:clean"
+
+end