buildr 1.4.6-x86-mswin32 → 1.4.7-x86-mswin32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +570 -505
  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
@@ -0,0 +1,178 @@
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
+ # Addes the <code>projectname:jdepend:swing</code>, <code>projectname:jdepend:text</code> and
18
+ # <code>projectname:jdepend:xml</code> tasks.
19
+ #
20
+ # Require explicitly using <code>require "buildr/jdepend"</code>.
21
+ module JDepend
22
+
23
+ class << self
24
+
25
+ # The specs for requirements
26
+ def dependencies
27
+ [
28
+ 'jdepend:jdepend:jar:2.9.1'
29
+ ]
30
+ end
31
+
32
+ def jdepend(output_file, target_paths, options = {})
33
+ dependencies = (options[:dependencies] || []) + self.dependencies
34
+ cp = Buildr.artifacts(dependencies).each(&:invoke).map(&:to_s)
35
+
36
+ args = []
37
+ if output_file
38
+ args << "-file"
39
+ args << output_file
40
+ end
41
+ target_paths.each do |target_path|
42
+ file(target_path).invoke
43
+ <<<<<<< HEAD
44
+ args << target_path
45
+ =======
46
+ args << target_path.to_s
47
+ >>>>>>> 28deb000947f13d5df722228ed2bc24fdcb303d3
48
+ end
49
+
50
+ # If no output file then we must be trying to run the swing app
51
+ command = output_file ? 'jdepend.xmlui.JDepend' : 'jdepend.swingui.JDepend'
52
+
53
+ begin
54
+ Java::Commands.java command, *(args + [{:classpath => cp, :properties => options[:properties], :java_args => options[:java_args]}])
55
+ rescue => e
56
+ raise e if options[:fail_on_error]
57
+ end
58
+ end
59
+ end
60
+
61
+ class Config
62
+ def enabled?
63
+ !!@enabled
64
+ end
65
+
66
+ attr_writer :enabled
67
+
68
+ def html_enabled?
69
+ File.exist?(self.style_file)
70
+ end
71
+
72
+ attr_writer :config_directory
73
+
74
+ def config_directory
75
+ @config_directory || project._(:source, :main, :etc, :jdepend)
76
+ end
77
+
78
+ attr_writer :report_dir
79
+
80
+ def report_dir
81
+ @report_dir || project._(:reports, :jdepend)
82
+ end
83
+
84
+ attr_writer :fail_on_error
85
+
86
+ def fail_on_error?
87
+ @fail_on_error.nil? ? false : @fail_on_error
88
+ end
89
+
90
+ attr_writer :xml_output_file
91
+
92
+ def xml_output_file
93
+ @xml_output_file || "#{self.report_dir}/jdepend.xml"
94
+ end
95
+
96
+ attr_writer :html_output_file
97
+
98
+ def html_output_file
99
+ @html_output_file || "#{self.report_dir}/jdepend.html"
100
+ end
101
+
102
+ attr_writer :style_file
103
+
104
+ def style_file
105
+ @style_file || "#{self.config_directory}/jdepend.xsl"
106
+ end
107
+
108
+ def target_paths
109
+ @target_paths ||= [self.project.compile.target, self.project.test.compile.target]
110
+ end
111
+
112
+ def to_options
113
+ {
114
+ :fail_on_error => project.jdepend.fail_on_error?,
115
+ # Set user home so that jdepend.properties will be loaded from there if present
116
+ :properties => { 'user.home' => project.jdepend.config_directory }
117
+ }
118
+ end
119
+
120
+ protected
121
+
122
+ def initialize(project)
123
+ @project = project
124
+ end
125
+
126
+ attr_reader :project
127
+
128
+ end
129
+
130
+ module ProjectExtension
131
+ include Extension
132
+
133
+ def jdepend
134
+ @jdepend ||= Buildr::JDepend::Config.new(project)
135
+ end
136
+
137
+ after_define do |project|
138
+ if project.jdepend.enabled?
139
+ desc "Generate JDepend xml report."
140
+ project.task("jdepend:xml") do
141
+ puts "JDepend: Analyzing source code..."
142
+ mkdir_p File.dirname(project.jdepend.xml_output_file)
143
+ Buildr::JDepend.jdepend(project.jdepend.xml_output_file,
144
+ project.jdepend.target_paths.flatten.compact,
145
+ project.jdepend.to_options)
146
+ end
147
+
148
+ desc "Run JDepend with Swing UI."
149
+ project.task("jdepend:swing") do
150
+ puts "JDepend: Analyzing source code..."
151
+ Buildr::JDepend.jdepend(nil,
152
+ project.jdepend.target_paths.flatten.compact,
153
+ project.jdepend.to_options)
154
+ end
155
+
156
+ if project.jdepend.html_enabled?
157
+ xml_task = project.task("jdepend:xml")
158
+ desc "Generate JDepend html report."
159
+ project.task("jdepend:html" => xml_task) do
160
+ puts "JDepend: Generating report"
161
+ mkdir_p File.dirname(project.jdepend.html_output_file)
162
+ Buildr.ant "jdepend" do |ant|
163
+ ant.xslt :in => project.jdepend.xml_output_file,
164
+ :out => project.jdepend.html_output_file,
165
+ :style => project.jdepend.style_file
166
+ end
167
+ end
168
+
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ class Buildr::Project
177
+ include Buildr::JDepend::ProjectExtension
178
+ end
@@ -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
data/addon/buildr/jibx.rb CHANGED
@@ -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