raven 1.2 → 1.2.1
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.
- data/lib/raven.rb +7 -4
- data/lib/raven/deps_tasks.rb +15 -0
- data/lib/raven/java_tasks.rb +18 -6
- data/lib/raven/repo_builder.rb +16 -1
- metadata +2 -3
- data/lib/raven/java_tasks.rb~ +0 -459
data/lib/raven.rb
CHANGED
@@ -57,14 +57,17 @@ module Raven
|
|
57
57
|
rel_url = match[2]
|
58
58
|
rel_url = rel_url + '/' if rel_url[-1..-1] != '/'
|
59
59
|
else
|
60
|
-
|
60
|
+
# Use the default maven2 repository.
|
61
|
+
# Info on maven2 mirrors can be found here:
|
62
|
+
# http://maven.apache.org/guides/mini/guide-mirror-settings.html
|
63
|
+
server = 'repo1.maven.org'
|
61
64
|
rel_url = '/maven2/'
|
62
65
|
end
|
63
|
-
puts "
|
66
|
+
puts "Connecting to Maven2 repository at http://#{server}#{rel_url}."
|
64
67
|
builder = Raven::GemRepoBuilder.new(server, 80, rel_url, Raven::Command.parse_proxy(proxy_url))
|
65
68
|
if (rest.size > 1)
|
66
69
|
rest.shift
|
67
|
-
puts "Packages #{rest}"
|
70
|
+
puts "Packages: #{rest.join(' ')}"
|
68
71
|
builder.group_filters = rest
|
69
72
|
end
|
70
73
|
builder.build
|
@@ -136,4 +139,4 @@ module Raven
|
|
136
139
|
end
|
137
140
|
end
|
138
141
|
end
|
139
|
-
end
|
142
|
+
end
|
data/lib/raven/deps_tasks.rb
CHANGED
@@ -54,6 +54,14 @@ module Raven
|
|
54
54
|
#
|
55
55
|
# See also Raven::MavenLocalRepoImport and Raven::GemRepoBuilder to
|
56
56
|
# learn more about how to build a Gem repository to get started.
|
57
|
+
#
|
58
|
+
# Alternatively dependencies can be directly declared manually on
|
59
|
+
# jar files in your file system. This allows you to manage your
|
60
|
+
# dependencies yourself without using Gem or any other repository.
|
61
|
+
#
|
62
|
+
# dependency 'deps' do |t|
|
63
|
+
# t.libs = Dir.glob('lib/**/*.jar')
|
64
|
+
# end
|
57
65
|
class DependencyTask < Rake::Task
|
58
66
|
attr_reader :gem_deps
|
59
67
|
|
@@ -84,6 +92,13 @@ module Raven
|
|
84
92
|
def deps
|
85
93
|
@deps ||= []
|
86
94
|
end
|
95
|
+
|
96
|
+
def libs
|
97
|
+
@libs ||= []
|
98
|
+
end
|
99
|
+
def libs=(l)
|
100
|
+
@libs = l
|
101
|
+
end
|
87
102
|
end
|
88
103
|
|
89
104
|
# Calls Gem installer to install a Gem (very predictible behaviour).
|
data/lib/raven/java_tasks.rb
CHANGED
@@ -87,6 +87,10 @@ module Raven
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
+
# The JUnit task runs all your test cases located in src/test/java or the
|
91
|
+
# build_path that you can set. JUnit inherits from the JavacTask so it
|
92
|
+
# accepts every configuration that JavacTask accepts. In addition you can
|
93
|
+
# provide an array containing your test classes (default pattern is **/Test*.java).
|
90
94
|
class JUnitTask < JavacTask
|
91
95
|
def execute
|
92
96
|
@build_path = ["src/test/java"] unless @build_path
|
@@ -290,9 +294,9 @@ module Raven
|
|
290
294
|
# group name default to the current directory name and its parent
|
291
295
|
# directory name respectively. Convenient if you follow the classic
|
292
296
|
# project/module directory structure. Otherwise, just set the
|
293
|
-
# <em>artifact</em> and <em>
|
297
|
+
# <em>artifact</em> and <em>project</em> to any value that suits you.
|
294
298
|
class GemWrapTask < Rake::Task
|
295
|
-
attr_writer :version, :artifact, :
|
299
|
+
attr_writer :version, :artifact, :project
|
296
300
|
|
297
301
|
def execute
|
298
302
|
super
|
@@ -343,12 +347,17 @@ module Raven
|
|
343
347
|
def self.build_cp(prerequisites)
|
344
348
|
classpath = []
|
345
349
|
Raven.prereq_filter(prerequisites, :gem_deps) do |dep_task|
|
346
|
-
dep_task.gem_deps
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
+
if (dep_task.gem_deps)
|
351
|
+
dep_task.gem_deps.each do |gempath|
|
352
|
+
Dir.foreach(gempath + '/ext') do |file|
|
353
|
+
next if file == '.' || file == '..'
|
354
|
+
classpath << gempath + '/ext/' + file
|
355
|
+
end
|
350
356
|
end
|
351
357
|
end
|
358
|
+
if (dep_task.libs)
|
359
|
+
classpath.concat(dep_task.libs.flatten)
|
360
|
+
end
|
352
361
|
end
|
353
362
|
classpath
|
354
363
|
end
|
@@ -364,6 +373,9 @@ module Raven
|
|
364
373
|
FileUtils.copy(gempath + '/ext/' + file, target)
|
365
374
|
end
|
366
375
|
end
|
376
|
+
dep_task.libs.flatten.each do |libpath|
|
377
|
+
FileUtils.copy(libpath, target)
|
378
|
+
end
|
367
379
|
end
|
368
380
|
end
|
369
381
|
|
data/lib/raven/repo_builder.rb
CHANGED
@@ -96,11 +96,26 @@ module Raven
|
|
96
96
|
|
97
97
|
def read_page(http, url, regexp, start=51, crop=4)
|
98
98
|
response = http.get(url, nil)
|
99
|
-
if response.
|
99
|
+
if response.is_a? Net::HTTPSuccess
|
100
100
|
response.body.scan(regexp) do |line|
|
101
101
|
groupId = line[start..(line.length - crop)]
|
102
102
|
yield(url, groupId)
|
103
103
|
end
|
104
|
+
else
|
105
|
+
STDERR.puts "Error connecting to repository: #{response.message}"
|
106
|
+
if response.is_a?(Net::HTTPRedirection) && response["location"]
|
107
|
+
puts "Location: #{response['location']}"
|
108
|
+
else
|
109
|
+
puts "------ RESPONSE CODE -----------------------------"
|
110
|
+
puts "Response code: #{response.code}"
|
111
|
+
puts "------ HEADERS -----------------------------------"
|
112
|
+
response.each_header do |key, value|
|
113
|
+
puts "#{key}: #{value}"
|
114
|
+
end
|
115
|
+
puts "------ CONTENT -----------------------------------"
|
116
|
+
puts response.body
|
117
|
+
puts '-' * 50
|
118
|
+
end
|
104
119
|
end
|
105
120
|
end
|
106
121
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: raven
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date:
|
6
|
+
version: 1.2.1
|
7
|
+
date: 2007-01-11 00:00:00 -08:00
|
8
8
|
summary: Java build system based on Rake and Gem.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -33,7 +33,6 @@ files:
|
|
33
33
|
- bin/raven
|
34
34
|
- lib/raven
|
35
35
|
- lib/raven.rb
|
36
|
-
- lib/raven/java_tasks.rb~
|
37
36
|
- lib/raven/deps_tasks.rb
|
38
37
|
- lib/raven/gem_init.rb
|
39
38
|
- lib/raven/java_tasks.rb
|
data/lib/raven/java_tasks.rb~
DELETED
@@ -1,459 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Copyright 2006 Matthieu Riou
|
4
|
-
#
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
# you may not use this file except in compliance with the License.
|
7
|
-
# You may obtain a copy of the License at
|
8
|
-
#
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
# See the License for the specific language governing permissions and
|
15
|
-
# limitations under the License.
|
16
|
-
|
17
|
-
require 'rake'
|
18
|
-
require 'fileutils'
|
19
|
-
require 'set'
|
20
|
-
|
21
|
-
# Monkey patching FileUtils to support filtering in copy.
|
22
|
-
module FileUtils
|
23
|
-
class Entry_
|
24
|
-
alias original copy
|
25
|
-
def copy(dest)
|
26
|
-
unless path['.svn'] || path['.cvs']
|
27
|
-
original(dest)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
module Raven
|
34
|
-
CP_SEP = PLATFORM['mswin'] ? ';' : ':'
|
35
|
-
|
36
|
-
# Executes Javac by passing it everything it needs. Stuff like a
|
37
|
-
# classpath and sources. The classpath is built by checking the
|
38
|
-
# prerequisites of the javac task. When a prerequisite is a dependency
|
39
|
-
# declaration (dependency task), it takes each declared Gems and
|
40
|
-
# adds the jar files found in them to the classpath.
|
41
|
-
#
|
42
|
-
# Can be customized by adding directories to the <em>build_path</em>
|
43
|
-
# using the << operator (if none defined, default is src/main/java).
|
44
|
-
class JavacTask < Rake::Task
|
45
|
-
|
46
|
-
def execute
|
47
|
-
super
|
48
|
-
@classpath = Raven.build_cp(prerequisites)
|
49
|
-
@classpath << "target/classes"
|
50
|
-
@build_path = ["src/main/java"] unless @build_path
|
51
|
-
|
52
|
-
puts "Building path #{@build_path.join(' ')}" if RakeFileUtils.verbose_flag
|
53
|
-
|
54
|
-
Dir.mkdir("target") unless File.exist?("target")
|
55
|
-
Dir.mkdir("target/classes") unless File.exist?("target/classes")
|
56
|
-
# Getting the source files to compile. Filtrating sources already
|
57
|
-
# compiled having a fresh enough class
|
58
|
-
source_files = @build_path.collect do |d|
|
59
|
-
Dir.glob("#{d}/**/*.java").select do |java|
|
60
|
-
classfile = 'target/classes/' + java[d.length, (java.length - 5 - d.length)] + '.class'
|
61
|
-
File.exist?(classfile) ? File.stat(java).mtime > File.stat(classfile).mtime : true
|
62
|
-
end
|
63
|
-
end.flatten
|
64
|
-
|
65
|
-
if (source_files.size > 0)
|
66
|
-
# Getting only package names, it shortens the command line
|
67
|
-
source_pkg = Set.new
|
68
|
-
source_files.each { |src| source_pkg << File.join(File.dirname(src), '*.java') }
|
69
|
-
# Executing javac
|
70
|
-
puts "javac -classpath \"#{@classpath.join(CP_SEP)}\" -sourcepath \"#{@build_path.join(CP_SEP)}\" -d target/classes #{source_pkg.to_a.join(' ')}" if RakeFileUtils.verbose_flag
|
71
|
-
`javac -classpath "#{@classpath.join(CP_SEP)}" -sourcepath "#{@build_path.join(CP_SEP)}" -d target/classes #{source_pkg.to_a.join(' ')}`
|
72
|
-
unless $?.exitstatus == 0
|
73
|
-
puts "Build failed, see above errors."
|
74
|
-
exit
|
75
|
-
end
|
76
|
-
else
|
77
|
-
puts 'All class files are up to date.' if RakeFileUtils.verbose_flag
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def build_path
|
82
|
-
@build_path ||= []
|
83
|
-
end
|
84
|
-
|
85
|
-
def build_path=(p)
|
86
|
-
@build_path = [p]
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
class JUnitTask < JavacTask
|
91
|
-
def execute
|
92
|
-
@build_path = ["src/test/java"] unless @build_path
|
93
|
-
super
|
94
|
-
unless @test_classes
|
95
|
-
puts "IN"
|
96
|
-
tests = @build_path.collect { |d| Dir.glob("#{d}/**/Test*.java").collect { |sd| sd[d.size+1..-1] } }
|
97
|
-
puts tests
|
98
|
-
@test_classes = tests.flatten.collect { |d| d.gsub('/', '.')[0..-6] }
|
99
|
-
puts @test_classes
|
100
|
-
end
|
101
|
-
failures = false
|
102
|
-
@test_classes.flatten.each do |tc|
|
103
|
-
puts "Running test #{tc}"
|
104
|
-
result = `java -classpath "#{@classpath.join(CP_SEP)}" junit.textui.TestRunner #{tc}`
|
105
|
-
puts result
|
106
|
-
failures = true if /FAILURES/ =~ result || /ERRORS/ =~ result
|
107
|
-
end
|
108
|
-
if failures
|
109
|
-
puts "There were failures!"
|
110
|
-
exit(1)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_classes
|
115
|
-
@test_classes ||= []
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_classes=(c)
|
119
|
-
@test_classes = [c]
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
# Builds a jar file from your compiled sources. The jarfile produced
|
124
|
-
# will have the same name as your jar task.
|
125
|
-
class JarTask < Rake::Task
|
126
|
-
def execute
|
127
|
-
super
|
128
|
-
latest = Raven.latest_file('target/classes')
|
129
|
-
|
130
|
-
# Manifest inclusion
|
131
|
-
mfest_param = @manifest ? "-m #{@manifest}" : ""
|
132
|
-
|
133
|
-
if !File.exist?("target/#{name}") || File.stat("target/#{name}").mtime < latest
|
134
|
-
`jar -cf target/#{name} #{mfest_param} -C target/classes .`
|
135
|
-
puts "Built jar file #{name}." if RakeFileUtils.verbose_flag
|
136
|
-
else
|
137
|
-
puts 'Nothing to do, jar is fresh enough.' if RakeFileUtils.verbose_flag
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
def manifest=(f)
|
142
|
-
@manifest = f
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
# Builds a jar file from your sources. Customized by adding directories
|
147
|
-
# to the <em>source_path</em> just like the JavacTask.
|
148
|
-
class JarSourceTask < Rake::Task
|
149
|
-
def execute
|
150
|
-
super
|
151
|
-
# Checking if any of our prerequisites is a JavacTask, if
|
152
|
-
# so we'll just use the build path to construct the jar.
|
153
|
-
Raven.prereq_filter(prerequisites, :build_path) do |javac_task|
|
154
|
-
(@source_path ||= []) << javac_task.build_path
|
155
|
-
end
|
156
|
-
|
157
|
-
# Initializing source path
|
158
|
-
@source_path = ["src/main/java"] unless @source_path
|
159
|
-
@source_path.flatten!
|
160
|
-
|
161
|
-
latest = Time.at(0)
|
162
|
-
@source_path.each do |dir|
|
163
|
-
dir_latest = Raven.latest_file(dir)
|
164
|
-
latest = dir_latest if dir_latest > latest
|
165
|
-
end
|
166
|
-
|
167
|
-
# Manifest inclusion
|
168
|
-
mfest_param = @manifest ? "-m #{@manifest}" : ""
|
169
|
-
|
170
|
-
# Building the jar from all sources
|
171
|
-
if !File.exist?("target/#{name}") || File.stat("target/#{name}").mtime < latest
|
172
|
-
`jar -cf target/#{name} #{mfest_param} -C #{@source_path.pop} .`
|
173
|
-
while (p = @source_path.pop)
|
174
|
-
`jar -uf target/#{name} -C #{p} .`
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def source_path
|
180
|
-
@source_path ||= []
|
181
|
-
end
|
182
|
-
|
183
|
-
def manifest=(f)
|
184
|
-
@manifest = f
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
# Produces a WAR from a web application directory. Includes the libraries
|
189
|
-
# needed in WEB-INF/lib (as long as the corresponding dependency task is
|
190
|
-
# declared as a prerequisite) and the compiled classes (if there are).
|
191
|
-
#
|
192
|
-
# Can be customized by setting <em>webapp_dir</em> to the directory
|
193
|
-
# containing your web application resources (web.xml, jsp, images, ...).
|
194
|
-
# The default is src/main/webapp.
|
195
|
-
class WarTask < Rake::Task
|
196
|
-
DEFAULT_TARGET = 'target/webapp/'
|
197
|
-
LIB_SUBDIR = 'WEB-INF/lib/'
|
198
|
-
CLASSES_SUBDIR = 'WEB-INF/classes/'
|
199
|
-
|
200
|
-
def execute
|
201
|
-
super
|
202
|
-
|
203
|
-
# Build target structure
|
204
|
-
@webapp_dir = @webapp_dir || 'src/main/webapp'
|
205
|
-
Raven.mkdir_recurse(DEFAULT_TARGET)
|
206
|
-
|
207
|
-
puts "Using web application directory #{@webapp_dir}" if RakeFileUtils.verbose_flag
|
208
|
-
|
209
|
-
FileUtils.cp_r(@webapp_dir, DEFAULT_TARGET)
|
210
|
-
|
211
|
-
# Eventually add classes compiled by javac
|
212
|
-
if (File.exist?('target/classes'))
|
213
|
-
Raven.mkdir_recurse(DEFAULT_TARGET + CLASSES_SUBDIR)
|
214
|
-
FileUtils.cp_r('target/classes/.', DEFAULT_TARGET + CLASSES_SUBDIR)
|
215
|
-
end
|
216
|
-
|
217
|
-
# Make lib directory with all dependencies
|
218
|
-
Raven.mkdir_recurse(DEFAULT_TARGET + LIB_SUBDIR)
|
219
|
-
Raven.mk_libs(DEFAULT_TARGET + LIB_SUBDIR, prerequisites)
|
220
|
-
|
221
|
-
# Build the war
|
222
|
-
`jar -cf target/#{name} -C #{DEFAULT_TARGET} .`
|
223
|
-
end
|
224
|
-
|
225
|
-
def webapp_dir=(param)
|
226
|
-
@webapp_dir = param
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
# Places all the dependencies in a given directory (useful mostly to
|
231
|
-
# build a distribution). The dependencies are selected from the
|
232
|
-
# prerequisites (using declared dependency tasks). The default
|
233
|
-
# directory is lib. Can be customized by setting <em>target</em>.
|
234
|
-
class LibDirTask < Rake::Task
|
235
|
-
def execute
|
236
|
-
super
|
237
|
-
puts "Copying libraries in #{@target}" if RakeFileUtils.verbose_flag
|
238
|
-
@target = @target || 'lib'
|
239
|
-
Raven.mk_libs(@target, prerequisites)
|
240
|
-
end
|
241
|
-
|
242
|
-
def target=(param)
|
243
|
-
@target = param
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
# Executes JavaDoc by passing it everything it needs. Stuff like a
|
248
|
-
# classpath and sources. The result is generated in target/jdoc. Can
|
249
|
-
# be customized exactly in the same way as the javac task.
|
250
|
-
class JavaDocTask < Rake::Task
|
251
|
-
|
252
|
-
def execute
|
253
|
-
super
|
254
|
-
classpath = Raven.build_cp(prerequisites)
|
255
|
-
classpath << "target/classes"
|
256
|
-
@build_path = ["src/main/java"] unless @build_path
|
257
|
-
|
258
|
-
puts "Executing JavaDoc using source path #{@build_path.join(' ')}" if RakeFileUtils.verbose_flag
|
259
|
-
|
260
|
-
Dir.mkdir("target") unless File.exist?("target")
|
261
|
-
Dir.mkdir("target/jdoc") unless File.exist?("target/jdoc")
|
262
|
-
|
263
|
-
packages = Set[]
|
264
|
-
@build_path.each do |d|
|
265
|
-
Dir.glob("#{d}/**/*.java").each do |java|
|
266
|
-
packages << java[(d.length + 1)..(java.rindex('/') - 1)].gsub(%r{[\\/]}, '.')
|
267
|
-
end
|
268
|
-
end
|
269
|
-
packages = packages.to_a
|
270
|
-
|
271
|
-
if (packages.size > 0)
|
272
|
-
puts "javadoc -classpath #{classpath.join(CP_SEP)} -sourcepath #{@build_path.join(CP_SEP)} -d target/jdoc #{packages.join(' ')}" if RakeFileUtils.verbose_flag
|
273
|
-
`javadoc -classpath #{classpath.join(CP_SEP)} -sourcepath #{@build_path.join(CP_SEP)} -d target/jdoc #{packages.join(' ')}`
|
274
|
-
unless $?.exitstatus == 0
|
275
|
-
puts "Javadoc failed, see above errors."
|
276
|
-
exit
|
277
|
-
end
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
def build_path
|
282
|
-
@build_path ||= []
|
283
|
-
end
|
284
|
-
|
285
|
-
def build_path=(p)
|
286
|
-
@build_path = [p]
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
# Wraps a jar file around a Gem. Useful for distributing it around.
|
291
|
-
# The jar is taken from the target directory. You must at least
|
292
|
-
# specify <em>version</em> to produce the Gem. The artifact name and
|
293
|
-
# group name default to the current directory name and its parent
|
294
|
-
# directory name respectively. Convenient if you follow the classic
|
295
|
-
# project/module directory structure. Otherwise, just set the
|
296
|
-
# <em>artifact</em> and <em>group</em> to any value that suits you.
|
297
|
-
class GemWrapTask < Rake::Task
|
298
|
-
attr_writer :version, :artifact, :group
|
299
|
-
|
300
|
-
def execute
|
301
|
-
super
|
302
|
-
puts "Wrapping jar in a Gem" if RakeFileUtils.verbose_flag
|
303
|
-
unless @version
|
304
|
-
puts "A version must be provided to produce a Gem!"
|
305
|
-
end
|
306
|
-
pwd = Dir.pwd
|
307
|
-
@artifact = pwd[(pwd.rindex('/') + 1)..pwd.length] unless @artifact
|
308
|
-
pwd = pwd[0..pwd.rindex('/') - 1]
|
309
|
-
@group = pwd[(pwd.rindex('/') + 1)..pwd.length] unless @group
|
310
|
-
Raven.mkdir_recurse('target/gem/ext')
|
311
|
-
FileUtils.cp(Dir.glob('target/*.jar'), 'target/gem/ext')
|
312
|
-
|
313
|
-
Dir.chdir('target/gem') do
|
314
|
-
spec = Gem::Specification.new do |s|
|
315
|
-
s.platform = Gem::Platform::JAVA
|
316
|
-
s.summary = "Raven wrapped library #{@artifact} from project #{@group}."
|
317
|
-
s.name = "#{@group}-#{@artifact}"
|
318
|
-
s.version = @version
|
319
|
-
s.requirements << 'none'
|
320
|
-
s.require_path = 'ext'
|
321
|
-
s.autorequire = 'rake'
|
322
|
-
s.files = Dir.glob("{ext}/**/*")
|
323
|
-
end
|
324
|
-
Gem::Builder.new(spec).build
|
325
|
-
end
|
326
|
-
FileUtils.mv("target/gem/#{@group}-#{@artifact}-#{@version}-java.gem", 'target')
|
327
|
-
end
|
328
|
-
end
|
329
|
-
|
330
|
-
# Wraps a jar file around a Gem and automatically installs it in your
|
331
|
-
# local Gem repository. See the gem wrap task for more info (same rules
|
332
|
-
# apply).
|
333
|
-
class GemInstallTask < GemWrapTask
|
334
|
-
def execute
|
335
|
-
super
|
336
|
-
params = [false]
|
337
|
-
params << RAVEN_HOME if defined?(GEMS_IN_HOME)
|
338
|
-
Gem::Installer.new("target/#{@group}-#{@artifact}-#{@version}-java.gem").install(*params)
|
339
|
-
end
|
340
|
-
end
|
341
|
-
|
342
|
-
private
|
343
|
-
|
344
|
-
# Builds the classpath by getting the path to the jars bundled
|
345
|
-
# in each gem dependency.
|
346
|
-
def self.build_cp(prerequisites)
|
347
|
-
classpath = []
|
348
|
-
Raven.prereq_filter(prerequisites, :gem_deps) do |dep_task|
|
349
|
-
dep_task.gem_deps.each do |gempath|
|
350
|
-
Dir.foreach(gempath + '/ext') do |file|
|
351
|
-
next if file == '.' || file == '..'
|
352
|
-
classpath << gempath + '/ext/' + file
|
353
|
-
end
|
354
|
-
end
|
355
|
-
end
|
356
|
-
classpath
|
357
|
-
end
|
358
|
-
|
359
|
-
# Copies the jars corresponding to each Gem dependency to a given
|
360
|
-
# directory.
|
361
|
-
def self.mk_libs(target, prereq)
|
362
|
-
Raven.mkdir_recurse(target)
|
363
|
-
Raven.prereq_filter(prereq, :gem_deps) do |dep_task|
|
364
|
-
dep_task.gem_deps.each do |gempath|
|
365
|
-
Dir.foreach(gempath + '/ext') do |file|
|
366
|
-
next if file == '.' || file == '..'
|
367
|
-
FileUtils.copy(gempath + '/ext/' + file, target)
|
368
|
-
end
|
369
|
-
end
|
370
|
-
end
|
371
|
-
end
|
372
|
-
|
373
|
-
# Duck typing selection of prerequisites
|
374
|
-
def self.prereq_filter(prerequisites, respond_to)
|
375
|
-
prerequisites.each do |prereq|
|
376
|
-
prereq_task = Rake::Task[prereq]
|
377
|
-
if prereq_task.respond_to?(respond_to)
|
378
|
-
yield(prereq_task)
|
379
|
-
end
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
# Recursively creates a directory
|
384
|
-
def self.mkdir_recurse(dir)
|
385
|
-
if dir.rindex('/')
|
386
|
-
parent = dir[0, dir.rindex('/')]
|
387
|
-
mkdir_recurse(parent) unless File.exist?(parent)
|
388
|
-
end
|
389
|
-
Dir.mkdir(dir) unless File.exist?(dir)
|
390
|
-
end
|
391
|
-
|
392
|
-
# Receursively browse a directory yielding on each file found.
|
393
|
-
def self.browse_files(root)
|
394
|
-
queue = [root]
|
395
|
-
while !queue.empty?
|
396
|
-
filename = queue.pop
|
397
|
-
if File.file?(filename)
|
398
|
-
yield(filename)
|
399
|
-
else
|
400
|
-
Dir.new(filename).each do |child|
|
401
|
-
unless ['..', '.', '.svn', '.cvs'].include?(child)
|
402
|
-
queue.push(filename + "/" + child)
|
403
|
-
end
|
404
|
-
end
|
405
|
-
end
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
# Returns the latest file timestamp in a directory structure
|
410
|
-
def self.latest_file(dir)
|
411
|
-
latest = Time.at(0)
|
412
|
-
Raven.browse_files(dir) do |f|
|
413
|
-
change = File.stat(f).mtime
|
414
|
-
latest = change if change > latest
|
415
|
-
end
|
416
|
-
latest
|
417
|
-
end
|
418
|
-
|
419
|
-
end
|
420
|
-
|
421
|
-
|
422
|
-
# Shortcut to the Javac task creation. Makes it handy.
|
423
|
-
def javac(args, &block)
|
424
|
-
Raven::JavacTask.define_task(args, &block)
|
425
|
-
end
|
426
|
-
|
427
|
-
# Shortcut to jar. Only 3 letters, isn't that beautiful?
|
428
|
-
def jar(args, &block)
|
429
|
-
Raven::JarTask.define_task(args, &block)
|
430
|
-
end
|
431
|
-
|
432
|
-
# I think you've got it now.
|
433
|
-
def jar_source(args, &block)
|
434
|
-
Raven::JarSourceTask.define_task(args, &block)
|
435
|
-
end
|
436
|
-
|
437
|
-
def junit(args, &block)
|
438
|
-
Raven::JUnitTask.define_task(args, &block)
|
439
|
-
end
|
440
|
-
|
441
|
-
def lib_dir(args, &block)
|
442
|
-
Raven::LibDirTask.define_task(args, &block)
|
443
|
-
end
|
444
|
-
|
445
|
-
def war(args, &block)
|
446
|
-
Raven::WarTask.define_task(args, &block)
|
447
|
-
end
|
448
|
-
|
449
|
-
def javadoc(args, &block)
|
450
|
-
Raven::JavaDocTask.define_task(args, &block)
|
451
|
-
end
|
452
|
-
|
453
|
-
def gem_wrap(args, &block)
|
454
|
-
Raven::GemWrapTask.define_task(args, &block)
|
455
|
-
end
|
456
|
-
|
457
|
-
def gem_wrap_inst(args, &block)
|
458
|
-
Raven::GemInstallTask.define_task(args, &block)
|
459
|
-
end
|