buildr 1.3.4-java → 1.3.5-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/CHANGELOG +35 -0
  2. data/README.rdoc +1 -1
  3. data/Rakefile +3 -3
  4. data/buildr.buildfile +6 -1
  5. data/buildr.gemspec +10 -9
  6. data/doc/_config.yml +1 -0
  7. data/doc/_layouts/default.html +25 -19
  8. data/doc/artifacts.textile +0 -36
  9. data/doc/building.textile +0 -38
  10. data/doc/contributing.textile +51 -15
  11. data/doc/css/default.css +11 -4
  12. data/doc/css/print.css +32 -24
  13. data/doc/download.textile +33 -22
  14. data/doc/extending.textile +10 -20
  15. data/doc/images/1442160941-frontcover.jpg +0 -0
  16. data/doc/images/asf-logo.png +0 -0
  17. data/doc/images/note.png +0 -0
  18. data/doc/images/project-structure.png +0 -0
  19. data/doc/images/tip.png +0 -0
  20. data/doc/images/zbuildr.png +0 -0
  21. data/doc/index.textile +39 -17
  22. data/doc/{getting_started.textile → installing.textile} +3 -80
  23. data/doc/languages.textile +50 -52
  24. data/doc/more_stuff.textile +154 -62
  25. data/doc/packaging.textile +0 -82
  26. data/doc/preface.textile +41 -15
  27. data/doc/projects.textile +0 -18
  28. data/doc/quick_start.textile +210 -0
  29. data/doc/scripts/install-linux.sh +10 -2
  30. data/doc/settings_profiles.textile +1 -33
  31. data/doc/testing.textile +6 -32
  32. data/lib/buildr.rb +2 -1
  33. data/lib/buildr/core.rb +6 -0
  34. data/lib/buildr/core/application.rb +2 -5
  35. data/lib/buildr/core/build.rb +29 -19
  36. data/lib/buildr/core/compile.rb +22 -4
  37. data/lib/buildr/core/filter.rb +2 -4
  38. data/lib/buildr/core/project.rb +5 -4
  39. data/lib/buildr/core/shell.rb +198 -0
  40. data/lib/buildr/core/test.rb +2 -0
  41. data/lib/buildr/core/transports.rb +18 -19
  42. data/lib/buildr/core/util.rb +178 -9
  43. data/lib/buildr/groovy.rb +1 -0
  44. data/lib/buildr/groovy/bdd.rb +5 -5
  45. data/lib/buildr/groovy/shell.rb +48 -0
  46. data/lib/buildr/ide/eclipse.rb +148 -36
  47. data/lib/buildr/ide/eclipse/java.rb +53 -0
  48. data/lib/buildr/ide/eclipse/plugin.rb +68 -0
  49. data/lib/buildr/ide/eclipse/scala.rb +66 -0
  50. data/lib/buildr/java/bdd.rb +16 -8
  51. data/lib/buildr/java/cobertura.rb +44 -13
  52. data/lib/buildr/java/commands.rb +5 -3
  53. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
  54. data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +18 -0
  55. data/lib/buildr/java/packaging.rb +2 -2
  56. data/lib/buildr/java/rjb.rb +1 -1
  57. data/lib/buildr/java/test_result.rb +48 -1
  58. data/lib/buildr/java/tests.rb +8 -5
  59. data/lib/buildr/packaging/artifact_namespace.rb +1 -1
  60. data/lib/buildr/packaging/package.rb +6 -2
  61. data/lib/buildr/packaging/zip.rb +10 -1
  62. data/lib/buildr/packaging/ziptask.rb +5 -2
  63. data/lib/buildr/scala.rb +1 -0
  64. data/lib/buildr/scala/bdd.rb +17 -8
  65. data/lib/buildr/scala/compiler.rb +66 -21
  66. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
  67. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
  68. data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +35 -0
  69. data/lib/buildr/scala/shell.rb +55 -0
  70. data/lib/buildr/scala/tests.rb +6 -5
  71. data/lib/buildr/shell.rb +180 -0
  72. data/rakelib/doc.rake +2 -3
  73. data/rakelib/jekylltask.rb +42 -32
  74. data/rakelib/package.rake +4 -2
  75. data/rakelib/release.rake +8 -8
  76. data/rakelib/rspec.rake +3 -3
  77. data/rakelib/setup.rake +7 -1
  78. data/rakelib/stage.rake +9 -2
  79. data/rakelib/stage.rake~ +213 -0
  80. data/spec/core/application_spec.rb +84 -1
  81. data/spec/core/build_spec.rb +54 -2
  82. data/spec/core/common_spec.rb +1 -1
  83. data/spec/core/compile_spec.rb +2 -1
  84. data/spec/core/extension_spec.rb +93 -0
  85. data/spec/core/test_spec.rb +2 -2
  86. data/spec/core/transport_spec.rb +1 -1
  87. data/spec/groovy/bdd_spec.rb +6 -6
  88. data/spec/groovy/compiler_spec.rb +1 -0
  89. data/spec/ide/eclipse_spec.rb +262 -72
  90. data/spec/java/{ant.rb → ant_spec.rb} +0 -0
  91. data/spec/java/bdd_spec.rb +15 -0
  92. data/spec/java/cobertura_spec.rb +9 -1
  93. data/spec/java/emma_spec.rb +1 -1
  94. data/spec/java/java_spec.rb +26 -0
  95. data/spec/java/packaging_spec.rb +9 -7
  96. data/spec/java/{test_coverage_spec.rb → test_coverage_helper.rb} +6 -4
  97. data/spec/java/tests_spec.rb +22 -0
  98. data/spec/packaging/archive_spec.rb +14 -0
  99. data/spec/packaging/artifact_spec.rb +2 -2
  100. data/spec/packaging/packaging_spec.rb +97 -2
  101. data/spec/sandbox.rb +3 -1
  102. data/spec/scala/bdd_spec.rb +17 -48
  103. data/spec/scala/compiler_spec.rb +31 -2
  104. data/spec/scala/tests_spec.rb +1 -0
  105. data/spec/spec_helpers.rb +12 -0
  106. metadata +145 -148
@@ -0,0 +1,53 @@
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 'buildr/core/project'
18
+ require 'buildr/core/common'
19
+
20
+ module Buildr
21
+ module Eclipse
22
+ module Java
23
+ include Extension
24
+
25
+ NATURE = 'org.eclipse.jdt.core.javanature'
26
+ CONTAINER = 'org.eclipse.jdt.launching.JRE_CONTAINER'
27
+ BUILDER = 'org.eclipse.jdt.core.javabuilder'
28
+
29
+ after_define do |project|
30
+ eclipse = project.eclipse
31
+
32
+ # smart defaults
33
+ if project.compile.language == :java || project.test.compile.language == :java
34
+ eclipse.natures = NATURE if eclipse.natures.empty?
35
+ eclipse.classpath_containers = CONTAINER if eclipse.classpath_containers.empty?
36
+ eclipse.builders = BUILDER if eclipse.builders.empty?
37
+ end
38
+
39
+ # :java nature explicitly set
40
+ if eclipse.natures.include? :java
41
+ eclipse.natures += NATURE unless eclipse.natures.include? NATURE
42
+ eclipse.classpath_containers += CONTAINER unless eclipse.classpath_containers.include? CONTAINER
43
+ eclipse.builders += BUILDER unless eclipse.builders.include? BUILDER
44
+ end
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+
51
+ class Buildr::Project
52
+ include Buildr::Eclipse::Java
53
+ end
@@ -0,0 +1,68 @@
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 'buildr/core/project'
18
+ require 'buildr/core/common'
19
+
20
+ module Buildr
21
+ module Eclipse
22
+ module Plugin
23
+ include Extension
24
+
25
+ NATURE = 'org.eclipse.pde.PluginNature'
26
+ CONTAINER = 'org.eclipse.pde.core.requiredPlugins'
27
+ BUILDERS = ['org.eclipse.pde.ManifestBuilder', 'org.eclipse.pde.SchemaBuilder']
28
+
29
+ after_define do |project|
30
+ eclipse = project.eclipse
31
+
32
+ # smart defaults
33
+ if eclipse.natures.empty? && ((File.exists? project.path_to("plugin.xml")) || (File.exists? project.path_to("OSGI-INF")))
34
+ eclipse.natures = [NATURE, Buildr::Eclipse::Java::NATURE]
35
+ eclipse.classpath_containers = [CONTAINER, Buildr::Eclipse::Java::CONTAINER] if eclipse.classpath_containers.empty?
36
+ eclipse.builders = BUILDERS + [Buildr::Eclipse::Java::BUILDER] if eclipse.builders.empty?
37
+ end
38
+
39
+ # :plugin nature explicitly set
40
+ if eclipse.natures.include? :plugin
41
+ unless eclipse.natures.include? NATURE
42
+ # plugin nature must be before java nature
43
+ eclipse.natures += [Buildr::Eclipse::Java::NATURE] unless eclipse.natures.include? Buildr::Eclipse::Java::NATURE
44
+ index = eclipse.natures.index(Buildr::Eclipse::Java::NATURE) || -1
45
+ eclipse.natures = eclipse.natures.insert(index, NATURE)
46
+ end
47
+ unless eclipse.classpath_containers.include? CONTAINER
48
+ # plugin container must be before java container
49
+ index = eclipse.classpath_containers.index(Buildr::Eclipse::Java::CONTAINER) || -1
50
+ eclipse.classpath_containers = eclipse.classpath_containers.insert(index, CONTAINER)
51
+ end
52
+ unless (eclipse.builders.include?(BUILDER[0]) && eclipse.builders.include?(BUILDER[1]))
53
+ # plugin builder must be before java builder
54
+ index = eclipse.classpath_containers.index(Buildr::Eclipse::Java::BUILDER) || -1
55
+ eclipse.builders = eclipse.builders.insert(index, BUILDER[1]) unless eclipse.builders.include? BUILDER[1]
56
+ index = eclipse.classpath_containers.index(BUILDER[1]) || -1
57
+ eclipse.builders = eclipse.builders.insert(index, BUILDER[0]) unless eclipse.builders.include? BUILDER[0]
58
+ end
59
+ end
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+
66
+ class Buildr::Project
67
+ include Buildr::Eclipse::Plugin
68
+ end
@@ -0,0 +1,66 @@
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 'buildr/core/project'
18
+ require 'buildr/core/common'
19
+
20
+ module Buildr
21
+ module Eclipse
22
+ module Scala
23
+ include Extension
24
+
25
+ NATURE = 'ch.epfl.lamp.sdt.core.scalanature'
26
+ CONTAINER = 'ch.epfl.lamp.sdt.launching.SCALA_CONTAINER'
27
+ BUILDER = 'ch.epfl.lamp.sdt.core.scalabuilder'
28
+
29
+ after_define do |project|
30
+ eclipse = project.eclipse
31
+
32
+ # smart defaults
33
+ if eclipse.natures.empty? && (project.compile.language == :scala || project.test.compile.language == :scala)
34
+ eclipse.natures = [NATURE, Buildr::Eclipse::Java::NATURE]
35
+ eclipse.classpath_containers = [CONTAINER, Buildr::Eclipse::Java::CONTAINER] if eclipse.classpath_containers.empty?
36
+ eclipse.builders = BUILDER if eclipse.builders.empty?
37
+ end
38
+
39
+ # :scala nature explicitly set
40
+ if eclipse.natures.include? :scala
41
+ unless eclipse.natures.include? NATURE
42
+ # scala nature must be before java nature
43
+ eclipse.natures += [Buildr::Eclipse::Java::NATURE] unless eclipse.natures.include? Buildr::Eclipse::Java::NATURE
44
+ index = eclipse.natures.index(Buildr::Eclipse::Java::NATURE) || -1
45
+ eclipse.natures = eclipse.natures.insert(index, NATURE)
46
+ end
47
+ unless eclipse.classpath_containers.include? CONTAINER
48
+ # scala container must be before java container
49
+ index = eclipse.classpath_containers.index(Buildr::Eclipse::Java::CONTAINER) || -1
50
+ eclipse.classpath_containers = eclipse.classpath_containers.insert(index, CONTAINER)
51
+ end
52
+ unless eclipse.builders.include? BUILDER
53
+ # scala builder overrides java builder
54
+ eclipse.builders -= [Buildr::Eclipse::Java::BUILDER]
55
+ eclipse.builders += [BUILDER]
56
+ end
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
63
+
64
+ class Buildr::Project
65
+ include Buildr::Eclipse::Scala
66
+ end
@@ -48,7 +48,7 @@ module Buildr
48
48
  module TestFramework::JRubyBased
49
49
  extend self
50
50
 
51
- VERSION = '1.1.6'
51
+ VERSION = '1.3.1'
52
52
 
53
53
  class << self
54
54
  def version
@@ -94,7 +94,7 @@ module Buildr
94
94
 
95
95
  Buildr.write(runner.file, runner.content)
96
96
  rm_f runner.result
97
-
97
+
98
98
  if RUBY_PLATFORM[/java/] && !options.fork
99
99
  runtime = new_runtime
100
100
  runtime.getObject.java.lang.System.getProperties().putAll(options[:properties] || {})
@@ -109,7 +109,7 @@ module Buildr
109
109
  if Exception === result
110
110
  raise [result.message, result.backtrace].flatten.join("\n")
111
111
  end
112
- result.succeeded
112
+ tests - result.failed
113
113
  end
114
114
 
115
115
  def jruby_home
@@ -201,9 +201,13 @@ module Buildr
201
201
  runner.gems ||= {}
202
202
  runner.rspec ||= ['--format', 'progress', '--format', "html:#{runner.html_report}"]
203
203
  runner.format.each { |format| runner.rspec << '--format' << format } if runner.format
204
- runner.rspec.push '--format', "Buildr::TestFramework::TestResult::YamlFormatter:#{runner.result}"
204
+ runner.rspec.push '--format', "#{runner_formatter}:#{runner.result}"
205
205
  runner
206
- end
206
+ end
207
+
208
+ def runner_formatter
209
+ "Buildr::TestFramework::TestResult::YamlFormatter"
210
+ end
207
211
 
208
212
  end
209
213
 
@@ -236,8 +240,7 @@ module Buildr
236
240
  end
237
241
 
238
242
  def tests(dependencies) #:nodoc:
239
- Dir[task.project.path_to(:source, bdd_dir, lang, '**/*_spec.rb')].
240
- select do |name|
243
+ Dir[task.project.path_to(:source, bdd_dir, lang, '**/*_spec.rb')].select do |name|
241
244
  selector = ENV['SPEC']
242
245
  selector.nil? || Regexp.new(selector) === name
243
246
  end
@@ -268,7 +271,8 @@ module Buildr
268
271
  argv.push *<%= tests.inspect %>
269
272
  parser.order!(argv)
270
273
  $rspec_options = parser.options
271
- Buildr::TestFramework::TestResult::Error.guard('<%= runner.file %>') do
274
+
275
+ Buildr::TestFramework::TestResult::Error.guard('<%= runner.result %>') do
272
276
  ::Spec::Runner::CommandLine.run($rspec_options)
273
277
  end
274
278
  exit 0 # let buildr figure the result from the yaml file
@@ -379,6 +383,10 @@ module Buildr
379
383
  Filter::Mapper.new(:erb, binding).transform(File.read(runner_erb), runner_erb)
380
384
  end
381
385
 
386
+ def runner_formatter
387
+ 'Buildr::TestFramework::TestResult::JtestRYamlFormatter'
388
+ end
389
+
382
390
  end
383
391
 
384
392
 
@@ -19,7 +19,7 @@ require 'buildr/java'
19
19
 
20
20
  module Buildr
21
21
 
22
- # Provides the <code>cobertura:html</code> and <code>cobertura:xml</code> tasks.
22
+ # Provides the <code>cobertura:html</code>, <code>cobertura:xml</code> and <code>cobertura:check</code> tasks.
23
23
  # Require explicitly using <code>require "buildr/cobertura"</code>.
24
24
  #
25
25
  # You can generate cobertura reports for a single project
@@ -37,6 +37,7 @@ module Buildr
37
37
  # cobertura.exclude 'some.foo.util.SimpleUtil'
38
38
  # cobertura.exclude /*.Const(ants)?/i
39
39
  # end
40
+ #
40
41
  module Cobertura
41
42
 
42
43
  VERSION = '1.9'
@@ -70,7 +71,7 @@ module Buildr
70
71
 
71
72
  attr_reader :project
72
73
  private :project
73
-
74
+
74
75
  attr_writer :data_file, :instrumented_dir, :report_dir
75
76
 
76
77
  def data_file
@@ -116,6 +117,15 @@ module Buildr
116
117
  def sources
117
118
  project.compile.sources
118
119
  end
120
+
121
+ def check
122
+ @check ||= CoberturaCheck.new
123
+ end
124
+ end
125
+
126
+ class CoberturaCheck
127
+ attr_writer :branch_rate, :line_rate, :total_branch_rate, :total_line_rate, :package_line_rate, :package_branch_rate
128
+ attr_reader :branch_rate, :line_rate, :total_branch_rate, :total_line_rate, :package_line_rate, :package_branch_rate
119
129
  end
120
130
 
121
131
  module CoberturaExtension # :nodoc:
@@ -171,23 +181,44 @@ module Buildr
171
181
  project.test.with Cobertura.dependencies
172
182
  project.test.options[:properties]["net.sourceforge.cobertura.datafile"] = cobertura.data_file
173
183
 
174
- [:xml, :html].each do |format|
175
- task format => ['instrument', 'test'] do
176
- info "Creating test coverage reports in #{cobertura.report_to(format)}"
177
- Buildr.ant "cobertura" do |ant|
178
- ant.taskdef :resource=>"tasks.properties",
179
- :classpath=>Buildr.artifacts(Cobertura.dependencies).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
180
- ant.send "cobertura-report", :format=>format,
181
- :destdir=>cobertura.report_to(format), :datafile=>cobertura.data_file do
182
- cobertura.sources.flatten.each do |src|
183
- ant.fileset(:dir=>src.to_s) if File.exist?(src.to_s)
184
+ unless project.compile.sources.empty?
185
+ [:xml, :html].each do |format|
186
+ task format => ['instrument', 'test'] do
187
+ info "Creating test coverage reports in #{cobertura.report_to(format)}"
188
+ Buildr.ant "cobertura" do |ant|
189
+ ant.taskdef :resource=>"tasks.properties",
190
+ :classpath=>Buildr.artifacts(Cobertura.dependencies).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
191
+ ant.send "cobertura-report", :format=>format,
192
+ :destdir=>cobertura.report_to(format), :datafile=>cobertura.data_file do
193
+ cobertura.sources.flatten.each do |src|
194
+ ant.fileset(:dir=>src.to_s) if File.exist?(src.to_s)
195
+ end
184
196
  end
185
197
  end
186
198
  end
187
199
  end
188
200
  end
201
+
202
+ task :check => [:instrument, :test] do
203
+ Buildr.ant "cobertura" do |ant|
204
+ ant.taskdef :classpath=>Cobertura.requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties"
205
+
206
+ params = { :datafile => Cobertura.data_file }
207
+
208
+ # oh so ugly...
209
+ params[:branchrate] = cobertura.check.branch_rate if cobertura.check.branch_rate
210
+ params[:linerate] = cobertura.check.line_rate if cobertura.check.line_rate
211
+ params[:totalbranchrate] = cobertura.check.total_branch_rate if cobertura.check.total_branch_rate
212
+ params[:totallinerate] = cobertura.check.total_line_rate if cobertura.check.total_line_rate
213
+ params[:packagebranchrate] = cobertura.check.package_branch_rate if cobertura.check.package_branch_rate
214
+ params[:packagelinerate] = cobertura.check.package_line_rate if cobertura.check.package_line_rate
215
+
216
+ ant.send("cobertura-check", params) do
217
+ end
218
+ end
219
+ end
220
+
189
221
  end
190
-
191
222
  end
192
223
 
193
224
  project.clean do
@@ -51,8 +51,8 @@ module Java
51
51
  block = lambda { |ok, res| fail "Failed to execute #{name}, see errors above" unless ok } unless block
52
52
  puts cmd_args.join(' ') if Buildr.application.options.trace
53
53
  cmd_args = cmd_args.map(&:inspect).join(' ') if Util.win_os?
54
- system(*cmd_args).tap do |ok|
55
- block.call ok, $?
54
+ sh(*cmd_args) do |ok, ps|
55
+ block.call ok, ps
56
56
  end
57
57
  end
58
58
  end
@@ -190,7 +190,9 @@ module Java
190
190
  # Returns the path to the specified Java command (with no argument to java itself).
191
191
  def path_to_bin(name = nil)
192
192
  home = ENV['JAVA_HOME'] or fail 'Are we forgetting something? JAVA_HOME not set.'
193
- File.expand_path(File.join(home, 'bin', name.to_s))
193
+ bin = File.expand_path(File.join(home, 'bin'))
194
+ fail 'JAVA_HOME environment variable does not point to a valid JRE/JDK installation.' unless File.exist? bin
195
+ File.expand_path(File.join(bin, name.to_s))
194
196
  end
195
197
 
196
198
  # :call-seq:
@@ -18,6 +18,7 @@
18
18
  package org.apache.buildr;
19
19
 
20
20
  import java.lang.reflect.Method;
21
+ import java.lang.reflect.Field;
21
22
  import java.lang.reflect.Modifier;
22
23
  import java.io.File;
23
24
  import java.io.IOException;
@@ -33,6 +34,7 @@ public class JavaTestFilter {
33
34
  private Vector methodAnnotations = new Vector();
34
35
  private Vector classAnnotations = new Vector();
35
36
  private Vector interfaces = new Vector();
37
+ private Vector fieldNames = new Vector();
36
38
 
37
39
  public JavaTestFilter(String[] paths) throws IOException {
38
40
  URL[] urls = new URL[paths.length];
@@ -70,6 +72,14 @@ public class JavaTestFilter {
70
72
  return this;
71
73
  }
72
74
 
75
+ public JavaTestFilter addFields(String[] names) {
76
+ for (int i = names.length; i -- > 0;) {
77
+ String name = names[i];
78
+ fieldNames.add(name);
79
+ }
80
+ return this;
81
+ }
82
+
73
83
  private boolean isTest(Class cls) {
74
84
  if (Modifier.isAbstract(cls.getModifiers()) || !Modifier.isPublic(cls.getModifiers()))
75
85
  return false;
@@ -94,6 +104,14 @@ public class JavaTestFilter {
94
104
  }
95
105
  }
96
106
  }
107
+ if (fieldNames != null) {
108
+ Field[] fields = cls.getFields();
109
+ for (int j = 0; j < fields.length; j++) {
110
+ for (Iterator it = fieldNames.iterator(); it.hasNext(); ) {
111
+ if (fields[j].getName().equals(it.next())) { return true; }
112
+ }
113
+ }
114
+ }
97
115
  return false;
98
116
  }
99
117
 
@@ -39,7 +39,7 @@ module Buildr
39
39
  sections = str.split(SECTION_SEPARATOR).reject { |s| s.strip.empty? }
40
40
  new sections.map { |section|
41
41
  lines = section.split(LINE_SEPARATOR).inject([]) { |merged, line|
42
- if line[0] == 32
42
+ if line[/^ /] == ' '
43
43
  merged.last << line[1..-1]
44
44
  else
45
45
  merged << line
@@ -302,7 +302,7 @@ module Buildr
302
302
  @wsdls = []
303
303
  prepare do
304
304
  path('META-INF').include @wsdls
305
- path('META-INF').include @services_xml, :as=>['services.xml'] if @services_xml
305
+ path('META-INF').include @services_xml, :as=>'services.xml' if @services_xml
306
306
  path('lib').include Buildr.artifacts(@libs) unless @libs.nil? || @libs.empty?
307
307
  end
308
308
  end
@@ -134,7 +134,7 @@ module Java
134
134
 
135
135
  def __package__(name) #:nodoc:
136
136
  const = name.split('.').map { |part| part.gsub(/^./) { |char| char.upcase } }.join
137
- return const_get(const) if constants.include?(const)
137
+ return const_get(const) if constants.include?(const) || constants.include?(const.to_sym)
138
138
  package = Module.new
139
139
  package.extend Package
140
140
  package.instance_variable_set :@name, name