raven 1.2 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|