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

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 +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