buildr 1.4.6-java → 1.4.7-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/CHANGELOG +81 -0
  2. data/Rakefile +5 -2
  3. data/addon/buildr/antlr.rb +0 -4
  4. data/addon/buildr/bnd.rb +3 -1
  5. data/addon/buildr/checkstyle.rb +201 -0
  6. data/addon/buildr/cobertura.rb +0 -1
  7. data/addon/buildr/drb.rb +0 -2
  8. data/addon/buildr/emma.rb +0 -1
  9. data/addon/buildr/findbugs.rb +227 -0
  10. data/addon/buildr/gwt.rake +82 -0
  11. data/addon/buildr/hibernate.rb +0 -4
  12. data/addon/buildr/javacc.rb +0 -4
  13. data/addon/buildr/javancss.rb +155 -0
  14. data/addon/buildr/jdepend.rb +138 -24
  15. data/addon/buildr/jdepend.rb.orig +178 -0
  16. data/addon/buildr/jetty.rb +0 -5
  17. data/addon/buildr/jibx.rb +85 -86
  18. data/addon/buildr/nailgun.rb +2 -2
  19. data/addon/buildr/openjpa.rb +0 -4
  20. data/addon/buildr/pmd.rb +166 -0
  21. data/addon/buildr/protobuf.rb +0 -1
  22. data/addon/buildr/sonar.rb +142 -0
  23. data/addon/buildr/xmlbeans.rb +0 -5
  24. data/buildr.gemspec +36 -21
  25. data/doc/_layouts/default.html +1 -0
  26. data/doc/contributing.textile +11 -2
  27. data/doc/download.textile +17 -5
  28. data/doc/index.textile +21 -46
  29. data/doc/installing.textile +18 -8
  30. data/doc/installing.textile.orig +282 -0
  31. data/doc/languages.textile +0 -38
  32. data/doc/more_stuff.textile +199 -12
  33. data/doc/more_stuff.textile.orig +1004 -0
  34. data/doc/packaging.textile +10 -0
  35. data/doc/settings_profiles.textile +2 -2
  36. data/etc/KEYS +44 -0
  37. data/lib/buildr.rb +67 -4
  38. data/lib/buildr/clojure.rb +0 -2
  39. data/lib/buildr/core/application.rb +23 -32
  40. data/lib/buildr/core/build.rb +0 -7
  41. data/lib/buildr/core/cc.rb +0 -5
  42. data/lib/buildr/core/checks.rb +0 -4
  43. data/lib/buildr/core/common.rb +0 -5
  44. data/lib/buildr/core/compile.rb +5 -10
  45. data/lib/buildr/core/doc.rb +9 -3
  46. data/lib/buildr/core/environment.rb +0 -1
  47. data/lib/buildr/core/filter.rb +0 -5
  48. data/lib/buildr/core/generate.rb +2 -6
  49. data/lib/buildr/core/help.rb +1 -6
  50. data/lib/buildr/core/linux.rb +0 -1
  51. data/lib/buildr/core/osx.rb +0 -1
  52. data/lib/buildr/core/project.rb +0 -4
  53. data/lib/buildr/core/run.rb +1 -5
  54. data/lib/buildr/core/shell.rb +1 -6
  55. data/lib/buildr/core/test.rb +1 -7
  56. data/lib/buildr/core/transports.rb +4 -6
  57. data/lib/buildr/core/util.rb +2 -65
  58. data/lib/buildr/groovy/doc.rb +0 -3
  59. data/lib/buildr/groovy/shell.rb +0 -2
  60. data/lib/buildr/ide/eclipse.rb +4 -13
  61. data/lib/buildr/ide/eclipse/java.rb +0 -4
  62. data/lib/buildr/ide/eclipse/plugin.rb +0 -4
  63. data/lib/buildr/ide/eclipse/scala.rb +0 -4
  64. data/lib/buildr/ide/idea.rb +284 -52
  65. data/lib/buildr/java/ant.rb +2 -6
  66. data/lib/buildr/java/bdd.rb +5 -123
  67. data/lib/buildr/java/cobertura.rb +16 -10
  68. data/lib/buildr/java/commands.rb +33 -7
  69. data/lib/buildr/java/compiler.rb +0 -7
  70. data/lib/buildr/java/deprecated.rb +0 -4
  71. data/lib/buildr/java/doc.rb +0 -2
  72. data/lib/buildr/java/emma.rb +0 -4
  73. data/lib/buildr/java/jruby.rb +0 -2
  74. data/lib/buildr/java/packaging.rb +0 -4
  75. data/lib/buildr/java/pom.rb +24 -16
  76. data/lib/buildr/java/rjb.rb +1 -1
  77. data/lib/buildr/java/test_result.rb +1 -2
  78. data/lib/buildr/java/tests.rb +68 -6
  79. data/lib/buildr/packaging/archive.rb +0 -1
  80. data/lib/buildr/packaging/artifact.rb +19 -16
  81. data/lib/buildr/packaging/artifact_namespace.rb +51 -24
  82. data/lib/buildr/packaging/artifact_search.rb +1 -2
  83. data/lib/buildr/packaging/gems.rb +1 -13
  84. data/lib/buildr/packaging/package.rb +0 -6
  85. data/lib/buildr/packaging/tar.rb +2 -4
  86. data/lib/buildr/packaging/version_requirement.rb +1 -1
  87. data/lib/buildr/packaging/zip.rb +1 -2
  88. data/lib/buildr/packaging/ziptask.rb +0 -4
  89. data/lib/buildr/run.rb +3 -3
  90. data/lib/buildr/scala/bdd.rb +129 -11
  91. data/lib/buildr/scala/compiler.rb +53 -6
  92. data/lib/buildr/scala/doc.rb +6 -4
  93. data/lib/buildr/scala/org/apache/buildr/Specs2Runner.class +0 -0
  94. data/lib/buildr/scala/org/apache/buildr/Specs2Runner.java +38 -0
  95. data/lib/buildr/scala/shell.rb +0 -4
  96. data/lib/buildr/scala/tests.rb +15 -6
  97. data/lib/buildr/shell.rb +0 -1
  98. data/lib/buildr/version.rb +1 -1
  99. data/rakelib/all-in-one.rake +20 -11
  100. data/rakelib/checks.rake +0 -31
  101. data/rakelib/doc.rake +86 -100
  102. data/rakelib/package.rake +3 -3
  103. data/rakelib/release.rake +1 -1
  104. data/rakelib/rspec.rake +23 -7
  105. data/rakelib/stage.rake +18 -21
  106. data/spec/addon/bnd_spec.rb +2 -2
  107. data/spec/addon/jaxb_xjc_spec.rb +5 -0
  108. data/spec/core/application_spec.rb +11 -64
  109. data/spec/core/cc_spec.rb +12 -5
  110. data/spec/core/compile_spec.rb +11 -0
  111. data/spec/core/doc_spec.rb +1 -1
  112. data/spec/core/run_spec.rb +17 -4
  113. data/spec/core/test_spec.rb +5 -3
  114. data/spec/ide/idea_spec.rb +60 -0
  115. data/spec/java/bdd_spec.rb +8 -218
  116. data/spec/java/cobertura_spec.rb +4 -0
  117. data/spec/java/compiler_spec.rb +11 -8
  118. data/spec/java/emma_spec.rb +4 -1
  119. data/spec/java/java_spec.rb +1 -1
  120. data/spec/java/pom_spec.rb +125 -0
  121. data/spec/java/tests_spec.rb +185 -0
  122. data/spec/packaging/archive_spec.rb +1 -1
  123. data/spec/packaging/artifact_namespace_spec.rb +15 -0
  124. data/spec/packaging/artifact_spec.rb +26 -1
  125. data/spec/sandbox.rb +7 -1
  126. data/spec/scala/bdd_spec.rb +111 -8
  127. data/spec/scala/tests_spec.rb +5 -1
  128. data/spec/spec_helpers.rb +9 -4
  129. data/spec/version_requirement_spec.rb +2 -0
  130. metadata +499 -467
  131. data/lib/buildr/core.rb +0 -34
  132. data/lib/buildr/ide.rb +0 -19
  133. data/lib/buildr/java.rb +0 -25
  134. data/lib/buildr/java/jtestr_result.rb +0 -331
  135. data/lib/buildr/java/jtestr_runner.rb.erb +0 -116
  136. data/lib/buildr/packaging.rb +0 -25
  137. data/rakelib/setup.rake +0 -68
@@ -13,15 +13,10 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
-
17
16
  require 'uri'
18
17
  require 'net/http'
19
- require 'buildr/core/project'
20
- require 'buildr/java'
21
- require 'buildr/packaging'
22
18
  require 'thread'
23
19
 
24
-
25
20
  module Buildr
26
21
 
27
22
  # Provides a collection of tasks and methods for using Jetty, specifically as a server
@@ -1,86 +1,85 @@
1
- # Licensed to the Apache Software Foundation (ASF) under one or more
2
- # contributor license agreements. See the NOTICE file distributed with this
3
- # work for additional information regarding copyright ownership. The ASF
4
- # licenses this file to you under the Apache License, Version 2.0 (the
5
- # "License"); you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
- # License for the specific language governing permissions and limitations under
14
- # the License.
15
-
16
-
17
- require 'java/java'
18
-
19
-
20
- module Buildr
21
-
22
- # Provides JiBX bytecode enhancement. Require explicitly using <code>require 'buildr/jibx'</code>.
23
- module JiBX
24
-
25
- JIBX_VERSION = '1.1.5'
26
- BCEL_VERSION = '5.2'
27
- STAX_VERSION = '1.0-2'
28
- XPP3_VERSION = '1.1.4c'
29
-
30
- REQUIRES = [ "org.jibx:jibx-bind:jar:#{JIBX_VERSION}",
31
- "org.jibx:jibx-run:jar:#{JIBX_VERSION}",
32
- "org.apache.bcel:bcel:jar:#{BCEL_VERSION}",
33
- "javax.xml.stream:stax-api:jar:#{STAX_VERSION}",
34
- "xpp3:xpp3:jar:#{XPP3_VERSION}" ]
35
-
36
- Java.classpath << REQUIRES
37
-
38
- class << self
39
-
40
- def bind(options)
41
- rake_check_options options, :classpath, :output, :binding, :target, :verbose, :load
42
- artifacts = Buildr.artifacts(options[:classpath]).each { |a| a.invoke }.map(&:to_s) + [options[:output].to_s]
43
- binding = file(options[:binding]).tap { |task| task.invoke }.to_s
44
-
45
- Buildr.ant 'jibx' do |ant|
46
- ant.taskdef :name=>'bind', :classname=>'org.jibx.binding.ant.CompileTask',
47
- :classpath => requires.join(File::PATH_SEPARATOR)
48
- ant.bind :verbose => options[:verbose].to_s, :load => options[:load].to_s, :binding=>options[:binding].to_s do
49
- ant.classpath :path => artifacts.join(File::PATH_SEPARATOR)
50
- end
51
- end
52
- end
53
-
54
- private
55
-
56
- def requires()
57
- @requires ||= Buildr.artifacts(REQUIRES).each { |artifact| artifact.invoke }.map(&:to_s)
58
- end
59
-
60
- end
61
-
62
- def jibx_bind(options = nil)
63
-
64
- # FIXME - add support for :bindingfileset and :classpathset
65
- # Note: either :binding or :bindingfileset should be set, and either
66
- # :classpath or :classpathset should be set, and options passed to
67
- # ant.bind should be adjusted accordingly. At present, only :binding
68
- # and :classpath are supported (which should be fine for most!)
69
- jibx_options = { :output => compile.target,
70
- :classpath => compile.classpath,
71
- :binding => path_to(:source, :main, :resources, 'META-INF/binding.xml'),
72
- :target => compile.target,
73
- :load => false,
74
- :verbose => false
75
- }
76
-
77
- JiBX.bind jibx_options.merge(options || {})
78
- end
79
-
80
- end
81
-
82
- class Project
83
- include JiBX
84
- end
85
- end
86
-
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+ require 'java/java'
17
+
18
+ module Buildr
19
+
20
+ # Provides JiBX bytecode enhancement. Require explicitly using <code>require 'buildr/jibx'</code>.
21
+ module JiBX
22
+
23
+ JIBX_VERSION = '1.1.5'
24
+ BCEL_VERSION = '5.2'
25
+ STAX_VERSION = '1.0-2'
26
+ XPP3_VERSION = '1.1.4c'
27
+
28
+ REQUIRES = ["org.jibx:jibx-bind:jar:#{JIBX_VERSION}",
29
+ "org.jibx:jibx-run:jar:#{JIBX_VERSION}",
30
+ "org.apache.bcel:bcel:jar:#{BCEL_VERSION}",
31
+ "javax.xml.stream:stax-api:jar:#{STAX_VERSION}",
32
+ "xpp3:xpp3:jar:#{XPP3_VERSION}"]
33
+
34
+ Java.classpath << REQUIRES
35
+
36
+ class << self
37
+
38
+ def bind(options)
39
+ rake_check_options options, :classpath, :output, :binding, :target, :verbose, :load
40
+ artifacts = Buildr.artifacts(options[:classpath]).each { |a| a.invoke }.map(&:to_s) + [options[:output].to_s]
41
+ binding = file(options[:binding]).tap { |task| task.invoke }.to_s
42
+
43
+ Buildr.ant 'jibx' do |ant|
44
+ ant.taskdef :name=>'bind',
45
+ :classname=>'org.jibx.binding.ant.CompileTask',
46
+ :classpath => requires.join(File::PATH_SEPARATOR)
47
+ ant.bind :verbose => options[:verbose].to_s, :load => options[:load].to_s, :binding=>options[:binding].to_s do
48
+ ant.classpath :path => artifacts.join(File::PATH_SEPARATOR)
49
+ end
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def requires()
56
+ @requires ||= Buildr.artifacts(REQUIRES).each { |artifact| artifact.invoke }.map(&:to_s)
57
+ end
58
+
59
+ end
60
+
61
+ def jibx_bind(options = nil)
62
+
63
+ # FIXME - add support for :bindingfileset and :classpathset
64
+ # Note: either :binding or :bindingfileset should be set, and either
65
+ # :classpath or :classpathset should be set, and options passed to
66
+ # ant.bind should be adjusted accordingly. At present, only :binding
67
+ # and :classpath are supported (which should be fine for most!)
68
+ jibx_options = {:output => compile.target,
69
+ :classpath => compile.classpath,
70
+ :binding => path_to(:source, :main, :resources, 'META-INF/binding.xml'),
71
+ :target => compile.target,
72
+ :load => false,
73
+ :verbose => false
74
+ }
75
+
76
+ JiBX.bind jibx_options.merge(options || {})
77
+ end
78
+
79
+ end
80
+
81
+ class Project
82
+ include JiBX
83
+ end
84
+ end
85
+
@@ -49,7 +49,7 @@ module Buildr
49
49
 
50
50
  # Returns the path to JRUBY_HOME.
51
51
  def jruby_home
52
- ENV['JRUBY_HOME'] || Config::CONFIG['prefix']
52
+ ENV['JRUBY_HOME'] || RbConfig::CONFIG['prefix']
53
53
  end
54
54
 
55
55
  # Returns the path to NAILGUN_HOME.
@@ -164,7 +164,7 @@ module Buildr
164
164
  attr_reader :artifact
165
165
  @artifact = Buildr.artifact(ARTIFACT_SPEC).from(nailgun_jar)
166
166
 
167
- compiled_bin = file(tmp_path(NAME, NAME, 'ng' + Config::CONFIG['EXEEXT']) => dist_dir.target) do |task|
167
+ compiled_bin = file(tmp_path(NAME, NAME, 'ng' + RbConfig::CONFIG['EXEEXT']) => dist_dir.target) do |task|
168
168
  unless task.to_s.pathmap('%x') == '.exe'
169
169
  Dir.chdir(task.to_s.pathmap('%d')) do
170
170
  info "Compiling #{task.to_s}"
@@ -13,10 +13,6 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
-
17
- require 'buildr/java'
18
-
19
-
20
16
  module Buildr
21
17
 
22
18
  # Provides OpenJPA bytecode enhancement and Mapping tool task. Require explicitly using <code>require "buildr/openjpa"</code>.
@@ -0,0 +1,166 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+ module Buildr
17
+ # Provides the <code>pmd:rule:xml</code>, <code>pmd:rule:html</code>, <code>pmd:cpd:xml</code>
18
+ # and <code>pmd:cpd:html</code> tasks.
19
+ #
20
+ # Require explicitly using <code>require "buildr/pmd"</code>.
21
+ module Pmd
22
+
23
+ class << self
24
+
25
+ # The specs for requirements
26
+ def dependencies
27
+ [
28
+ 'pmd:pmd:jar:4.2.6',
29
+ 'jaxen:jaxen:jar:1.1.1',
30
+ 'asm:asm:jar:3.2'
31
+ ]
32
+ end
33
+
34
+ def pmd(rule_set_files, format, output_file_prefix, source_paths, options = {})
35
+ dependencies = (options[:dependencies] || []) + self.dependencies
36
+ cp = Buildr.artifacts(dependencies).each(&:invoke).map(&:to_s)
37
+ (options[:rule_set_paths] || []).each {|p| cp << p}
38
+
39
+ puts "PMD: Analyzing source code..."
40
+ mkdir_p File.dirname(output_file_prefix)
41
+
42
+ Buildr.ant("pmd-report") do |ant|
43
+ ant.taskdef :name=> 'pmd', :classpath => cp.join(';'), :classname => 'net.sourceforge.pmd.ant.PMDTask'
44
+ ant.pmd :shortFilenames => true, :rulesetfiles => rule_set_files.join(',') do
45
+ ant.formatter :type => format, :toFile => "#{output_file_prefix}.#{format}"
46
+ source_paths.each do |src|
47
+ ant.fileset :dir=> src, :includes=>'**/*.java'
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+
54
+ def cpd(format, output_file_prefix, source_paths, options = {})
55
+ dependencies = (options[:dependencies] || []) + self.dependencies
56
+ cp = Buildr.artifacts(dependencies).each(&:invoke).map(&:to_s)
57
+ minimum_token_count = options[:minimum_token_count] || 100
58
+ encoding = options[:encoding] || 'UTF-8'
59
+
60
+ puts "PMD-CPD: Analyzing source code..."
61
+ mkdir_p File.dirname(output_file_prefix)
62
+
63
+ Buildr.ant("cpd-report") do |ant|
64
+ ant.taskdef :name=> 'cpd', :classpath => cp.join(';'), :classname => 'net.sourceforge.pmd.cpd.CPDTask'
65
+ ant.cpd :format => format, :minimumTokenCount => minimum_token_count, :encoding => encoding, :outputFile => "#{output_file_prefix}.#{format}" do
66
+ source_paths.each do |src|
67
+ ant.fileset :dir=> src, :includes=>'**/*.java'
68
+ end
69
+ end
70
+
71
+ end
72
+ end
73
+ end
74
+
75
+ class Config
76
+
77
+ attr_writer :enabled
78
+
79
+ def enabled?
80
+ !!@enabled
81
+ end
82
+
83
+ attr_writer :rule_set_files
84
+
85
+ def rule_set_files
86
+ @rule_set_files || ['basic','imports','unusedcode']
87
+ end
88
+
89
+ attr_writer :rule_set_paths
90
+
91
+ def rule_set_paths
92
+ @rule_set_paths ||= []
93
+ end
94
+
95
+ attr_writer :report_dir
96
+
97
+ def report_dir
98
+ @report_dir || project._(:reports, :pmd)
99
+ end
100
+
101
+ attr_writer :output_file_prefix
102
+
103
+ def output_file_prefix
104
+ @output_file_prefix || "#{self.report_dir}/pmd"
105
+ end
106
+
107
+ attr_writer :cpd_output_file_prefix
108
+
109
+ def cpd_output_file_prefix
110
+ @cpd_output_file_prefix || "#{self.report_dir}/cpd"
111
+ end
112
+
113
+ def source_paths
114
+ @source_paths ||= [self.project.compile.sources, self.project.test.compile.sources]
115
+ end
116
+
117
+ def flat_source_paths
118
+ source_paths.flatten.compact
119
+ end
120
+
121
+ protected
122
+
123
+ def initialize(project)
124
+ @project = project
125
+ end
126
+
127
+ attr_reader :project
128
+ end
129
+
130
+ module ProjectExtension
131
+ include Extension
132
+
133
+ def pmd
134
+ @pmd ||= Buildr::Pmd::Config.new(project)
135
+ end
136
+
137
+ after_define do |project|
138
+ if project.pmd.enabled?
139
+ desc "Generate pmd xml report."
140
+ project.task("pmd:rule:xml") do
141
+ Buildr::Pmd.pmd(project.pmd.rule_set_files, 'xml', project.pmd.output_file_prefix, project.pmd.flat_source_paths, :rule_set_paths => project.pmd.rule_set_paths)
142
+ end
143
+
144
+ desc "Generate pmd html report."
145
+ project.task("pmd:rule:html") do
146
+ Buildr::Pmd.pmd(project.pmd.rule_set_files, 'html', project.pmd.output_file_prefix, project.pmd.flat_source_paths, :rule_set_paths => project.pmd.rule_set_paths)
147
+ end
148
+
149
+ desc "Generate pmd cpd xml report."
150
+ project.task("pmd:cpd:xml") do
151
+ Buildr::Pmd.cpd('xml', project.pmd.cpd_output_file_prefix, project.pmd.flat_source_paths)
152
+ end
153
+
154
+ desc "Generate pmd cpd text report."
155
+ project.task("pmd:cpd:text") do
156
+ Buildr::Pmd.cpd('text', project.pmd.cpd_output_file_prefix, project.pmd.flat_source_paths)
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+
164
+ class Buildr::Project
165
+ include Buildr::Pmd::ProjectExtension
166
+ end
@@ -13,7 +13,6 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
-
17
16
  module Buildr
18
17
 
19
18
  # Provides Protocol buffer code generation tasks.
@@ -0,0 +1,142 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with this
3
+ # work for additional information regarding copyright ownership. The ASF
4
+ # licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+ module Buildr
17
+ module Sonar
18
+
19
+ class << self
20
+
21
+ # The specs for requirements
22
+ def dependencies
23
+ [
24
+ 'org.codehaus.sonar-plugins:sonar-ant-task:jar:1.3'
25
+ ]
26
+ end
27
+
28
+ def sonar(jdbc_url, jdbc_driver_class_name, jdbc_username, jdbc_password, host_url, project_name, key, sources, binaries, libraries)
29
+
30
+ # Build the artifacts for FindBugs to analyse
31
+ Buildr.artifacts(binaries).each(&:invoke)
32
+
33
+ cp = Buildr.artifacts(self.dependencies).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
34
+
35
+ args = {
36
+ :key => key,
37
+ :version => '1',
38
+ 'xmlns:sonar' => 'antlib:org.sonar.ant'
39
+ }
40
+
41
+ Buildr.ant('sonar') do |ant|
42
+ ant.taskdef :name => 'sonar', :classname => 'org.sonar.ant.SonarTask', :classpath => cp
43
+
44
+ ant.property :name => 'sonar.projectName', :value => project_name
45
+
46
+ ant.property :name => 'sonar.jdbc.url', :value => jdbc_url
47
+ ant.property :name => 'sonar.jdbc.driverClassName', :value => jdbc_driver_class_name
48
+ ant.property :name => 'sonar.jdbc.username', :value => jdbc_username
49
+ ant.property :name => 'sonar.jdbc.password', :value => jdbc_password
50
+ ant.property :name => 'sonar.host.url', :value => host_url
51
+
52
+ ant.property :name => 'sonar.checkstyle.generateXml', :value => 'true'
53
+
54
+ ant.property :name => 'sonar.sources', :value => sources.join(',')
55
+ ant.property :name => 'sonar.binaries', :value => binaries.join(',')
56
+ ant.property :name => 'sonar.libraries', :value => libraries.join(',')
57
+
58
+ ant.sonar args
59
+
60
+ end
61
+ end
62
+ end
63
+
64
+ class Config
65
+
66
+ attr_accessor :enabled
67
+ attr_accessor :jdbc_url
68
+ attr_accessor :jdbc_driver_class_name
69
+ attr_accessor :jdbc_username
70
+ attr_accessor :jdbc_password
71
+ attr_accessor :host_url
72
+ attr_accessor :key
73
+ attr_accessor :project_name
74
+
75
+ attr_writer :sources
76
+ def sources
77
+ @sources ||= []
78
+ end
79
+
80
+ attr_writer :binaries
81
+ def binaries
82
+ @binaries ||= []
83
+ end
84
+
85
+ attr_writer :libraries
86
+ def libraries
87
+ @libraries ||= []
88
+ end
89
+
90
+ def enabled?
91
+ !!@enabled
92
+ end
93
+
94
+ protected
95
+
96
+ def initialize(project)
97
+ @project = project
98
+ end
99
+
100
+ attr_reader :project
101
+
102
+ end
103
+
104
+ module ProjectExtension
105
+ include Extension
106
+
107
+ def sonar
108
+ @sonar ||= Buildr::Sonar::Config.new(project)
109
+ end
110
+
111
+ after_define do |project|
112
+ if project.sonar.enabled?
113
+ desc 'Execute Sonar code analysis'
114
+ project.task('sonar') do
115
+ puts 'Sonar: Analyzing source code...'
116
+
117
+ sources = project.sonar.sources.flatten.compact
118
+ binaries = project.sonar.binaries.flatten.compact
119
+ libraries = project.sonar.libraries.flatten.compact
120
+
121
+ Buildr::Sonar.sonar(
122
+ project.sonar.jdbc_url,
123
+ project.sonar.jdbc_driver_class_name,
124
+ project.sonar.jdbc_username,
125
+ project.sonar.jdbc_password,
126
+ project.sonar.host_url,
127
+ project.sonar.project_name,
128
+ project.sonar.key,
129
+ sources,
130
+ binaries,
131
+ libraries
132
+ )
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+
140
+ class Buildr::Project
141
+ include Buildr::Sonar::ProjectExtension
142
+ end