buildr 0.16.0 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +45 -0
- data/README +4 -0
- data/lib/buildr.rb +15 -3
- data/lib/core/artifact.rb +22 -23
- data/lib/core/build.rb +52 -41
- data/lib/core/core.rb +119 -4
- data/lib/core/project.rb +213 -187
- data/lib/java/compile.rb +152 -174
- data/lib/java/eclipse.rb +79 -0
- data/lib/java/java.rb +39 -1
- data/lib/java/jetty.rb +123 -0
- data/lib/java/jetty/JettyWrapper$1.class +0 -0
- data/lib/java/jetty/JettyWrapper$BuildrHandler.class +0 -0
- data/lib/java/jetty/JettyWrapper.class +0 -0
- data/lib/java/jetty/JettyWrapper.java +107 -0
- data/lib/java/openjpa.rb +8 -10
- data/lib/java/packaging.rb +65 -32
- data/lib/java/test.rb +121 -51
- data/lib/java/xmlbeans.rb +6 -4
- data/lib/tasks/filter.rb +15 -4
- data/lib/tasks/zip.rb +10 -36
- metadata +9 -2
data/lib/java/test.rb
CHANGED
@@ -2,57 +2,120 @@ module Buildr
|
|
2
2
|
|
3
3
|
class JUnitTask < Rake::Task
|
4
4
|
|
5
|
-
attr_accessor :base_dir
|
6
|
-
attr_accessor :target
|
7
5
|
attr_accessor :classpath
|
8
6
|
|
9
7
|
def initialize(*args)
|
10
8
|
super
|
11
9
|
@classpath = []
|
10
|
+
@paths = []
|
11
|
+
@include = []
|
12
|
+
@exclude = []
|
12
13
|
enhance do |task|
|
13
|
-
test_cases.
|
14
|
-
|
15
|
-
|
14
|
+
if test_cases.empty?
|
15
|
+
puts "#{name}: No tests to run"
|
16
|
+
else
|
17
|
+
passed, failed = Java.junit(test_cases, :classpath=>classpath)
|
18
|
+
fail "#{name}: The following tests failed:\n#{failed.join("\n")}" unless failed.empty?
|
16
19
|
end
|
17
20
|
end
|
18
21
|
end
|
19
22
|
|
23
|
+
def from(*files)
|
24
|
+
@paths += files
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def include(*files)
|
29
|
+
@include += files
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def exclude(*files)
|
34
|
+
@exclude += files
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def with(*files)
|
39
|
+
@classpath |= artifacts(files.flatten).uniq
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
20
43
|
def test_cases()
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
44
|
+
unless @cases
|
45
|
+
@include << "*" if @include.empty?
|
46
|
+
@cases = @paths.map do |path|
|
47
|
+
base = Pathname.new(path)
|
48
|
+
FileList[File.join(path, "**", "*Test.class")].
|
49
|
+
map { |file| Pathname.new(file).relative_path_from(base).to_s.ext("").gsub(File::SEPARATOR, ".") }.
|
50
|
+
select { |name| @include.any? { |pattern| File.fnmatch(pattern, name) } }.
|
51
|
+
reject { |name| @exclude.any? { |pattern| File.fnmatch(pattern, name) } }
|
52
|
+
end.flatten.sort
|
53
|
+
end
|
54
|
+
@cases
|
55
|
+
end
|
56
|
+
|
57
|
+
def invoke()
|
58
|
+
setup
|
59
|
+
begin
|
60
|
+
super
|
61
|
+
ensure
|
62
|
+
teardown
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def needed?()
|
67
|
+
return true unless ENV["TESTS"] =~ /(no|off|false|disable)/i
|
68
|
+
end
|
69
|
+
|
70
|
+
def prerequisites()
|
71
|
+
super + classpath + @paths
|
72
|
+
end
|
73
|
+
|
74
|
+
def invoke_prerequisites()
|
75
|
+
prerequisites.each { |n| application[n, @scope].invoke }
|
26
76
|
end
|
27
77
|
|
28
|
-
def
|
29
|
-
|
78
|
+
def setup()
|
79
|
+
Rake::Task[name.sub(/run$/, "setup")].invoke
|
80
|
+
end
|
81
|
+
|
82
|
+
def teardown()
|
83
|
+
Rake::Task[name.sub(/run$/, "teardown")].invoke
|
30
84
|
end
|
31
85
|
|
32
86
|
end
|
33
87
|
|
88
|
+
|
34
89
|
class Tests
|
90
|
+
|
91
|
+
def initialize(project)
|
92
|
+
@project = project
|
93
|
+
end
|
94
|
+
|
35
95
|
def prepare(*tasks, &block)
|
36
|
-
|
96
|
+
@project.task("tests:prepare").enhance tasks, &block
|
37
97
|
end
|
38
98
|
|
39
99
|
def compile(*sources, &block)
|
40
|
-
|
41
|
-
@compile_task = Java::CompileTask.define_task("compile"=>prepare) { |task| resources.invoke }
|
42
|
-
end
|
43
|
-
returning(@compile_task) { |task| task.sources |= sources ; task.enhance &block }
|
100
|
+
@project.task("tests:compile").from(sources).enhance &block
|
44
101
|
end
|
45
|
-
|
102
|
+
|
46
103
|
def resources(*tasks, &block)
|
47
|
-
|
104
|
+
@project.task("tests:resources").enhance tasks, &block
|
48
105
|
end
|
49
106
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
107
|
+
def setup(*tasks, &block)
|
108
|
+
@project.task("tests:setup").enhance tasks, &block
|
109
|
+
end
|
110
|
+
|
111
|
+
def run(*tasks, &block)
|
112
|
+
@project.task("tests:run").enhance tasks, &block
|
113
|
+
end
|
114
|
+
|
115
|
+
def teardown(*tasks, &block)
|
116
|
+
@project.task("tests:teardown").enhance tasks, &block
|
55
117
|
end
|
118
|
+
|
56
119
|
end
|
57
120
|
|
58
121
|
class Project
|
@@ -61,45 +124,52 @@ module Buildr
|
|
61
124
|
inherited_attr :test_target_dir do File.join(target_dir, "test-classes") end
|
62
125
|
|
63
126
|
def tests()
|
64
|
-
@tests ||= Tests.new
|
127
|
+
@tests ||= Tests.new(self)
|
65
128
|
end
|
66
129
|
|
67
130
|
def test(*tasks, &block)
|
68
|
-
|
131
|
+
tests.run *tasks, &block
|
69
132
|
end
|
70
133
|
end
|
71
134
|
|
72
135
|
# Global task compiles all projects.
|
73
136
|
desc "Run all test cases"
|
74
|
-
|
137
|
+
Project.local_task task("test")
|
75
138
|
|
76
139
|
Project.on_define do |project|
|
77
|
-
tests
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
140
|
+
namespace "tests" do
|
141
|
+
# Compile task requires prepare and performs resources, if anything compiled.
|
142
|
+
#Java::CompileTask.define_task("compile"=>[project.compile, task("prepare")]) { |task| project.tests.resources.invoke }
|
143
|
+
Java::CompileTask.define_task("compile"=>[project.compile, task("prepare")]) { |task| project.tests.resources.invoke }
|
144
|
+
# Resources task is a filter.
|
145
|
+
FilterTask.define_task("resources")
|
146
|
+
JUnitTask.define_task("run"=>task("compile"))
|
147
|
+
task("setup")
|
148
|
+
task("teardown")
|
149
|
+
end
|
150
|
+
project.tests.compile.with Java::JUNIT_REQUIRES
|
85
151
|
project.recursive_task("test"=>project.test)
|
86
152
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
tests.compile.
|
94
|
-
tests.compile.classpath << project.compile.target
|
95
|
-
tests.
|
96
|
-
tests.
|
97
|
-
tests.
|
98
|
-
tests.junit.classpath += tests.compile.classpath
|
99
|
-
tests.junit.classpath += [ tests.compile.target, project.compile.target ]
|
100
|
-
tests.junit.base_dir = project.base_dir
|
101
|
-
file(tests.compile.target).enhance [ tests.compile ]
|
102
|
-
file(tests.resources.target).enhance [ tests.resources ]
|
153
|
+
project.enhance do |project|
|
154
|
+
project.tests.compile.from project.path_to(:test_src_dir) if File.exist?(project.path_to(:test_src_dir))
|
155
|
+
project.tests.compile.into project.path_to(:test_target_dir) unless project.tests.compile.target
|
156
|
+
project.tests.resources.include project.path_to(:test_resources_dir, "*") if File.exists?(project.path_to(:test_resources_dir))
|
157
|
+
project.tests.resources.into project.tests.compile.target unless project.tests.resources.target
|
158
|
+
|
159
|
+
project.tests.compile.classpath += project.compile.classpath
|
160
|
+
project.tests.compile.classpath << project.compile.target
|
161
|
+
project.tests.run.from project.tests.compile.target
|
162
|
+
project.tests.run.classpath += project.tests.compile.classpath
|
163
|
+
project.tests.run.classpath << project.tests.compile.target
|
103
164
|
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
rule /^test:.*$/ do |task|
|
169
|
+
test = task.name.scan(/test:(.*)/)[0][0]
|
170
|
+
Project.projects.select { |project| project.base_dir == Rake.application.original_dir }.
|
171
|
+
map { |project| project.task("tests:run") }.
|
172
|
+
each { |task| task.include("*#{test}").invoke }
|
104
173
|
end
|
174
|
+
|
105
175
|
end
|
data/lib/java/xmlbeans.rb
CHANGED
@@ -9,8 +9,6 @@ module Buildr
|
|
9
9
|
options[:verbose] ||= Rake.application.options.trace || false
|
10
10
|
fu_check_options options, :verbose, :noop, :javasource, :jar, :classes, :output
|
11
11
|
|
12
|
-
# Classpath for XMLBeans.
|
13
|
-
cp = REQUIRES.map { |id| artifact(id) }.each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
|
14
12
|
# Options for SchemaCompiler.
|
15
13
|
cmd_args = [ options[:verbose] ? "-verbose" : "-quiet" ]
|
16
14
|
cmd_args << "-javasource" << options[:javasource].collect.join(File::PATH_SEPARATOR) if options[:javasource]
|
@@ -21,10 +19,10 @@ module Buildr
|
|
21
19
|
cmd_args << { :verbose=>options[:verbose] }
|
22
20
|
|
23
21
|
unless options[:noop]
|
24
|
-
|
22
|
+
puts "Running XMLBeans schema compiler" if verbose
|
25
23
|
mkpath options[:classes], :verbose=>false rescue nil if options[:classes]
|
26
24
|
mkpath options[:output], :verbose=>false rescue nil if options[:output]
|
27
|
-
sh(Java.path_to_bin("java"), "-Xmx256m", "-cp",
|
25
|
+
sh(Java.path_to_bin("java"), "-Xmx256m", "-cp", requires.join(File::PATH_SEPARATOR),
|
28
26
|
"org.apache.xmlbeans.impl.tool.SchemaCompiler", *cmd_args) { |ok, res|
|
29
27
|
fail "Failed to compile schemas, see errors above" unless ok }
|
30
28
|
# Touch paths to let other tasks know there's an update.
|
@@ -32,6 +30,10 @@ module Buildr
|
|
32
30
|
touch options[:output], :verbose=>false if options[:output]
|
33
31
|
end
|
34
32
|
end
|
33
|
+
|
34
|
+
def self.requires()
|
35
|
+
@requires ||= artifacts(REQUIRES).each { |artifact| artifact.invoke }.map(&:to_s)
|
36
|
+
end
|
35
37
|
|
36
38
|
class CompileTask < Rake::FileTask
|
37
39
|
|
data/lib/tasks/filter.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Buildr
|
2
2
|
|
3
|
-
class
|
3
|
+
class FilterTask < Rake::Task
|
4
4
|
|
5
5
|
# The target directory.
|
6
|
-
|
6
|
+
attr_reader :target
|
7
7
|
# Filter to use.
|
8
8
|
attr_accessor :filter
|
9
9
|
|
@@ -46,7 +46,11 @@ module Buildr
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def into(dir)
|
49
|
-
|
49
|
+
dir = File.expand_path(dir)
|
50
|
+
unless @target == dir
|
51
|
+
@target = dir
|
52
|
+
file(dir).enhance [self]
|
53
|
+
end
|
50
54
|
self
|
51
55
|
end
|
52
56
|
|
@@ -55,6 +59,13 @@ module Buildr
|
|
55
59
|
self
|
56
60
|
end
|
57
61
|
|
62
|
+
def needed?
|
63
|
+
return false if target.nil? || copy_map.empty?
|
64
|
+
return true unless File.exist?(target)
|
65
|
+
return true if copy_map.any? { |dest, src| !File.exist?(dest) || File.mtime(src) > File.mtime(dest) }
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
58
69
|
protected
|
59
70
|
|
60
71
|
# Return a copy map of all the files that need copying: the key is
|
@@ -89,7 +100,7 @@ module Buildr
|
|
89
100
|
|
90
101
|
def filter(*files)
|
91
102
|
task = nil
|
92
|
-
namespace { task =
|
103
|
+
namespace { task = FilterTask.define_task("filter").include *files }
|
93
104
|
task
|
94
105
|
end
|
95
106
|
|
data/lib/tasks/zip.rb
CHANGED
@@ -19,18 +19,19 @@ module Buildr
|
|
19
19
|
else
|
20
20
|
options = {}
|
21
21
|
end
|
22
|
+
files = files.flatten
|
22
23
|
|
23
24
|
if options[:path]
|
24
25
|
path(options[:path]).include *files +[ options.reject { |k,v| k == :path } ]
|
25
26
|
elsif options[:as]
|
26
27
|
raise "You can only use the :as option in combination with the :path option" unless options.keys.size == 1
|
27
28
|
raise "You can only use one file with the :as option" unless files.size == 1
|
28
|
-
include_as(files.first, options[:as])
|
29
|
+
include_as(files.first.to_s, options[:as])
|
29
30
|
elsif options[:merge]
|
30
31
|
raise "You can only use the :merge option in combination with the :path option" unless options.keys.size == 1
|
31
32
|
files.each { |file| merge file }
|
32
33
|
elsif options.keys.empty?
|
33
|
-
(@files ||= FileList[]).include
|
34
|
+
(@files ||= FileList[]).include files.map(&:to_s)
|
34
35
|
else
|
35
36
|
raise "Unrecognized option #{options.keys.join(", ")}"
|
36
37
|
end
|
@@ -55,7 +56,7 @@ module Buildr
|
|
55
56
|
path(options[:path]).merge *files +[ options.reject { |k,v| k == :path } ]
|
56
57
|
elsif options.keys.empty?
|
57
58
|
files.collect do |file|
|
58
|
-
@expand_sources << proc {
|
59
|
+
@expand_sources << proc { file.to_s }
|
59
60
|
expander = ZipExpander.new(file)
|
60
61
|
@add_files << proc { |zip| expander.expand(zip, @path) }
|
61
62
|
expander
|
@@ -69,7 +70,7 @@ module Buildr
|
|
69
70
|
|
70
71
|
def setup_path(path = nil)
|
71
72
|
@path = "#{path}/" if path
|
72
|
-
expand_src = proc {
|
73
|
+
expand_src = proc { (@files || []).map(&:to_s).uniq }
|
73
74
|
@expand_sources = [ expand_src ]
|
74
75
|
@add_files = [] << proc do |zip|
|
75
76
|
expand_src.call.each do |file|
|
@@ -87,9 +88,9 @@ module Buildr
|
|
87
88
|
end
|
88
89
|
|
89
90
|
def include_as(source, as)
|
90
|
-
@expand_sources << proc {
|
91
|
+
@expand_sources << proc { source }
|
91
92
|
@add_files << proc do |zip|
|
92
|
-
file =
|
93
|
+
file = source.to_s
|
93
94
|
if File.directory?(file)
|
94
95
|
in_directory(file) do |file, rel_path|
|
95
96
|
puts "Adding #{@path}#{as}/#{rel_path}" if Rake.application.options.trace
|
@@ -158,7 +159,7 @@ module Buildr
|
|
158
159
|
class ZipExpander
|
159
160
|
|
160
161
|
def initialize(zip_file)
|
161
|
-
@zip_file = zip_file
|
162
|
+
@zip_file = zip_file.to_s
|
162
163
|
end
|
163
164
|
|
164
165
|
def include(*files)
|
@@ -176,7 +177,7 @@ module Buildr
|
|
176
177
|
def expand(zip, path)
|
177
178
|
@includes ||= ["*"]
|
178
179
|
@excludes ||= []
|
179
|
-
Zip::ZipFile.open(
|
180
|
+
Zip::ZipFile.open(@zip_file) do |source|
|
180
181
|
source.entries.reject { |entry| entry.directory? }.each do |entry|
|
181
182
|
if @includes.any? { |pattern| File.fnmatch(pattern, entry.name) } &&
|
182
183
|
!@excludes.any? { |pattern| File.fnmatch(pattern, entry.name) }
|
@@ -232,7 +233,7 @@ module Buildr
|
|
232
233
|
most_recent = @paths.collect { |name, path| path.expand_sources }.flatten.
|
233
234
|
each { |src| File.directory?(src) ? FileList[File.join(src, "**", "*")] | [src] : src }.flatten.
|
234
235
|
select { |file| File.exist?(file) }.collect { |file| File.stat(file).mtime }.max
|
235
|
-
File.stat(name).mtime < (most_recent || Rake::EARLY)
|
236
|
+
File.stat(name).mtime < (most_recent || Rake::EARLY) || super
|
236
237
|
end
|
237
238
|
|
238
239
|
protected
|
@@ -241,33 +242,6 @@ module Buildr
|
|
241
242
|
@paths.each { |name, obj| obj.add_file zip }
|
242
243
|
end
|
243
244
|
|
244
|
-
def zip_map()
|
245
|
-
unless @zip_map
|
246
|
-
args = @paths.collect do |path, files|
|
247
|
-
if path
|
248
|
-
dest_for = proc { |f| File.join(path, f) }
|
249
|
-
else
|
250
|
-
dest_for = proc { |f| f }
|
251
|
-
end
|
252
|
-
artifacts(*files).map(&:to_s).collect do |file|
|
253
|
-
if File.directory?(file)
|
254
|
-
# Include all files inside the directory, with path starting
|
255
|
-
# from the directory itself.
|
256
|
-
prefix = File.dirname(file) + File::SEPARATOR
|
257
|
-
Dir[File.join(file, "**", "*")].sort.
|
258
|
-
reject { |file| File.directory?(file) || files.exclude?(file) }.
|
259
|
-
collect { |file| [ dest_for[file.sub(prefix, "")], file ] }
|
260
|
-
else
|
261
|
-
# Include just that one file, sans its diectory path.
|
262
|
-
[ dest_for[File.basename(file)], file ]
|
263
|
-
end
|
264
|
-
end
|
265
|
-
end.flatten
|
266
|
-
@zip_map = Hash[ *args ]
|
267
|
-
end
|
268
|
-
@zip_map
|
269
|
-
end
|
270
|
-
|
271
245
|
end
|
272
246
|
|
273
247
|
# The ZipTask creates a new ZIP file. You can include any number of files and
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: buildr
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-03-
|
6
|
+
version: 0.18.0
|
7
|
+
date: 2007-03-30 00:00:00 -07:00
|
8
8
|
summary: A build system that doesn't suck
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -42,12 +42,19 @@ files:
|
|
42
42
|
- lib/core/artifact.rb
|
43
43
|
- lib/core/project.rb
|
44
44
|
- lib/java/test.rb
|
45
|
+
- lib/java/eclipse.rb
|
46
|
+
- lib/java/jetty.rb
|
45
47
|
- lib/java/xmlbeans.rb
|
46
48
|
- lib/java/java.rb
|
47
49
|
- lib/java/javacc.rb
|
48
50
|
- lib/java/packaging.rb
|
49
51
|
- lib/java/openjpa.rb
|
50
52
|
- lib/java/compile.rb
|
53
|
+
- lib/java/jetty
|
54
|
+
- lib/java/jetty/JettyWrapper.java
|
55
|
+
- lib/java/jetty/JettyWrapper$1.class
|
56
|
+
- lib/java/jetty/JettyWrapper$BuildrHandler.class
|
57
|
+
- lib/java/jetty/JettyWrapper.class
|
51
58
|
- CHANGELOG
|
52
59
|
- README
|
53
60
|
- LICENSE
|