Author: donaldp
Date: Thu May 3 07:48:30 2012
New Revision: 1333337
URL: http://svn.apache.org/viewvc?rev=1333337&view=rev
Log:
Add a Sonar extension
Added:
buildr/trunk/addon/buildr/sonar.rb
Modified:
buildr/trunk/CHANGELOG
Modified: buildr/trunk/CHANGELOG
URL:
http://svn.apache.org/viewvc/buildr/trunk/CHANGELOG?rev=1333337&r1=1333336&r2=1333337&view=diff
==============================================================================
--- buildr/trunk/CHANGELOG (original)
+++ buildr/trunk/CHANGELOG Thu May 3 07:48:30 2012
@@ -1,4 +1,5 @@
1.4.7 (Pending)
+* Added: Add a Sonar extension.
* Change: BUILDR-638 Update to rake 0.9.2.2 (Russell Teabeault)
* Added: BUILDR-316 Add a GWT extension
* Change: BUILDR-624 Update rspec version to 2.9.0 (Russell Teabeault)
Added: buildr/trunk/addon/buildr/sonar.rb
URL:
http://svn.apache.org/viewvc/buildr/trunk/addon/buildr/sonar.rb?rev=1333337&view=auto
==============================================================================
--- buildr/trunk/addon/buildr/sonar.rb (added)
+++ buildr/trunk/addon/buildr/sonar.rb Thu May 3 07:48:30 2012
@@ -0,0 +1,142 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with this
+# work for additional information regarding copyright ownership. The ASF
+# licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+module Buildr
+ module Sonar
+
+ class << self
+
+ # The specs for requirements
+ def dependencies
+ [
+ 'org.codehaus.sonar-plugins:sonar-ant-task:jar:1.3'
+ ]
+ end
+
+ def sonar(jdbc_url, jdbc_driver_class_name, jdbc_username,
jdbc_password, host_url, project_name, key, sources, binaries, libraries)
+
+ # Build the artifacts for FindBugs to analyse
+ Buildr.artifacts(binaries).each(&:invoke)
+
+ cp =
Buildr.artifacts(self.dependencies).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
+
+ args = {
+ :key => key,
+ :version => '1',
+ 'xmlns:sonar' => 'antlib:org.sonar.ant'
+ }
+
+ Buildr.ant('sonar') do |ant|
+ ant.taskdef :name => 'sonar', :classname =>
'org.sonar.ant.SonarTask', :classpath => cp
+
+ ant.property :name => 'sonar.projectName', :value => project_name
+
+ ant.property :name => 'sonar.jdbc.url', :value => jdbc_url
+ ant.property :name => 'sonar.jdbc.driverClassName', :value =>
jdbc_driver_class_name
+ ant.property :name => 'sonar.jdbc.username', :value => jdbc_username
+ ant.property :name => 'sonar.jdbc.password', :value => jdbc_password
+ ant.property :name => 'sonar.host.url', :value => host_url
+
+ ant.property :name => 'sonar.checkstyle.generateXml', :value =>
'true'
+
+ ant.property :name => 'sonar.sources', :value => sources.join(',')
+ ant.property :name => 'sonar.binaries', :value => binaries.join(',')
+ ant.property :name => 'sonar.libraries', :value =>
libraries.join(',')
+
+ ant.sonar args
+
+ end
+ end
+ end
+
+ class Config
+
+ attr_accessor :enabled
+ attr_accessor :jdbc_url
+ attr_accessor :jdbc_driver_class_name
+ attr_accessor :jdbc_username
+ attr_accessor :jdbc_password
+ attr_accessor :host_url
+ attr_accessor :key
+ attr_accessor :project_name
+
+ attr_writer :sources
+ def sources
+ @sources ||= []
+ end
+
+ attr_writer :binaries
+ def binaries
+ @binaries ||= []
+ end
+
+ attr_writer :libraries
+ def libraries
+ @libraries ||= []
+ end
+
+ def enabled?
+ !!@enabled
+ end
+
+ protected
+
+ def initialize(project)
+ @project = project
+ end
+
+ attr_reader :project
+
+ end
+
+ module ProjectExtension
+ include Extension
+
+ def sonar
+ @sonar ||= Buildr::Sonar::Config.new(project)
+ end
+
+ after_define do |project|
+ if project.sonar.enabled?
+ desc 'Execute Sonar code analysis'
+ project.task('sonar') do
+ puts 'Sonar: Analyzing source code...'
+
+ sources = project.sonar.sources.flatten.compact
+ binaries = project.sonar.binaries.flatten.compact
+ libraries = project.sonar.libraries.flatten.compact
+
+ Buildr::Sonar.sonar(
+ project.sonar.jdbc_url,
+ project.sonar.jdbc_driver_class_name,
+ project.sonar.jdbc_username,
+ project.sonar.jdbc_password,
+ project.sonar.host_url,
+ project.sonar.project_name,
+ project.sonar.key,
+ sources,
+ binaries,
+ libraries
+ )
+ end
+ end
+ end
+ end
+ end
+end
+
+class Buildr::Project
+ include Buildr::Sonar::ProjectExtension
+end
\ No newline at end of file