Antwrap 0.3 → 0.4
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/docs/index.html +2 -21
- data/lib/antwrap.rb +57 -109
- data/lib/rakefile.rb +101 -0
- data/test/output/META-INF/MANIFEST.MF +3 -0
- data/test/output/parent/FooBarParent.class +0 -0
- data/test/tc_antwrap.rb +29 -2
- metadata +7 -4
data/docs/index.html
CHANGED
@@ -53,29 +53,10 @@ circumstances):
|
|
53
53
|
<pre><li>There are some reserved words that we have to work around. For example, Ant-Contrib tasks such as 'if' and 'else'
|
54
54
|
conflict with the Ruby reserved words. Under most circumstances, you won't need to use these tasks (indeed, the
|
55
55
|
awkwardness of conditional operations in Ant scripts is likely one of the reasons why you want to move to a build system
|
56
|
-
such as Rake).
|
57
|
-
|
58
|
-
Nevertheless, there are that occasions demands it. One such situation is the <java> Ant task. The 'java'
|
59
|
-
symbol conflicts with a symbol in the JRuby library.
|
60
|
-
|
61
|
-
Reserved words like this can be worked around by simply prepending an underscore character ('_') to the task:
|
56
|
+
such as Rake). Nevertheless, there are that occasions demands it. Reserved words like this can be worked around by simply prepending an
|
57
|
+
underscore character ('_') to the task:
|
62
58
|
|
63
59
|
<code lang="ruby">
|
64
|
-
@ant._java(:classname => 'foo.bar.FooBar', :fork => 'false') {
|
65
|
-
arg(:value => 'argOne')
|
66
|
-
classpath(){
|
67
|
-
pathelement(:location => '${output_dir}/classes')
|
68
|
-
pathelement(:location => '${resource_dir}/parent.jar')
|
69
|
-
}
|
70
|
-
arg(:value => 'argTwo')
|
71
|
-
jvmarg(:value => 'client')
|
72
|
-
sysproperty(:key=> 'antwrap', :value => 'coolio')
|
73
|
-
}
|
74
|
-
|
75
|
-
#Because the 'java' Ant task is likely to be very popular, there is an alias you can use called 'jvm'.
|
76
|
-
#The above task could be rewritten as:
|
77
|
-
@ant.jvm(:classname => 'foo.bar.FooBar', :fork => 'false') {...
|
78
|
-
|
79
60
|
#This is an example of the Ant-Contrib tasks.
|
80
61
|
#note: I added an underscore to 'equals' even though it isn't a reserved word.
|
81
62
|
#This makes the code block more symmetrical (it's not required though). It also
|
data/lib/antwrap.rb
CHANGED
@@ -4,43 +4,39 @@
|
|
4
4
|
#
|
5
5
|
# Licensed under the LGPL, see the file COPYING in the distribution
|
6
6
|
#
|
7
|
-
require 'fileutils'
|
8
|
-
require 'logger'
|
9
|
-
require 'java'
|
10
7
|
|
11
8
|
module ApacheAnt
|
12
|
-
|
13
|
-
include_class "org.apache.tools.ant.RuntimeConfigurable"
|
14
|
-
include_class "org.apache.tools.ant.Project"
|
9
|
+
require 'java'
|
15
10
|
include_class "org.apache.tools.ant.DefaultLogger"
|
16
|
-
include_class "org.apache.tools.ant.Target"
|
17
11
|
include_class "org.apache.tools.ant.Main"
|
12
|
+
include_class "org.apache.tools.ant.Project"
|
13
|
+
include_class "org.apache.tools.ant.RuntimeConfigurable"
|
14
|
+
include_class "org.apache.tools.ant.Target"
|
15
|
+
include_class "org.apache.tools.ant.UnknownElement"
|
18
16
|
end
|
19
17
|
|
20
18
|
module JavaLang
|
19
|
+
require 'java'
|
21
20
|
include_class "java.lang.System"
|
22
21
|
end
|
23
22
|
|
24
23
|
class AntTask
|
25
24
|
private
|
26
25
|
@@task_stack = Array.new
|
27
|
-
attr_reader :unknown_element, :project, :taskname, :logger
|
26
|
+
attr_reader :unknown_element, :project, :taskname, :logger, :executed
|
28
27
|
|
29
28
|
public
|
30
29
|
def initialize(taskname, antProject, attributes, proc)
|
31
|
-
if
|
32
|
-
taskname = taskname[1, taskname.length-1]
|
33
|
-
end
|
30
|
+
taskname = taskname[1, taskname.length-1] if taskname[0,1] == "_"
|
34
31
|
@logger = antProject.logger
|
35
|
-
@logger.debug("AntTask.taskname: #{taskname}, antProject:#{antProject}, atts:#{attributes.to_s}, proc:#{proc.to_s}")
|
36
32
|
@taskname = taskname
|
37
33
|
@project_wrapper = antProject
|
38
34
|
@project = antProject.project()
|
39
|
-
@logger.debug(
|
35
|
+
@logger.debug(antProject.to_s)
|
40
36
|
@unknown_element = create_unknown_element(@project, taskname)
|
41
|
-
@logger.debug(
|
37
|
+
@logger.debug(to_s)
|
38
|
+
|
42
39
|
addAttributes(attributes)
|
43
|
-
@logger.debug("2")
|
44
40
|
|
45
41
|
if proc
|
46
42
|
@logger.debug("task_stack.push #{taskname} >> #{@@task_stack}")
|
@@ -55,43 +51,52 @@ class AntTask
|
|
55
51
|
proc.instance_eval &proc
|
56
52
|
@@task_stack.pop
|
57
53
|
end
|
58
|
-
@logger.debug("3")
|
59
54
|
|
60
55
|
end
|
61
56
|
|
62
57
|
def create_unknown_element(project, taskname)
|
58
|
+
|
63
59
|
unknown_element = ApacheAnt::UnknownElement.new(taskname)
|
64
60
|
unknown_element.project= project
|
65
61
|
unknown_element.owningTarget= ApacheAnt::Target.new()
|
66
|
-
unknown_element.namespace= ''
|
67
|
-
unknown_element.QName= taskname
|
68
|
-
unknown_element.taskType= taskname
|
69
62
|
unknown_element.taskName= taskname
|
63
|
+
|
64
|
+
if(@project_wrapper.ant_version >= 1.6)
|
65
|
+
unknown_element.taskType= taskname
|
66
|
+
unknown_element.namespace= ''
|
67
|
+
unknown_element.QName= taskname
|
68
|
+
end
|
69
|
+
|
70
70
|
return unknown_element
|
71
|
+
|
71
72
|
end
|
72
73
|
|
73
74
|
def addAttributes(attributes)
|
75
|
+
|
76
|
+
return if attributes == nil
|
77
|
+
|
74
78
|
wrapper = ApacheAnt::RuntimeConfigurable.new(@unknown_element, @unknown_element.getTaskName());
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
wrapper.
|
79
|
+
outer_func = lambda{ |key, val, tfunc| key == 'pcdata' ? wrapper.addText(val) : tfunc.call(key, val) }
|
80
|
+
|
81
|
+
if(@project_wrapper.ant_version >= 1.6)
|
82
|
+
attributes.each do |key, val|
|
83
|
+
outer_func.call(key.to_s, val, lambda{|k,v| wrapper.setAttribute(k, val)})
|
80
84
|
end
|
81
|
-
|
85
|
+
else
|
86
|
+
@unknown_element.setRuntimeConfigurableWrapper(wrapper)
|
87
|
+
attribute_list = org.xml.sax.helpers.AttributeListImpl.new()
|
88
|
+
attributes.each do |key, val|
|
89
|
+
outer_func.call(key.to_s, val, lambda{|k,v| attribute_list.addAttribute(k, 'CDATA', v)})
|
90
|
+
end
|
91
|
+
wrapper.setAttributes(attribute_list)
|
92
|
+
end
|
93
|
+
|
82
94
|
end
|
83
95
|
|
84
96
|
def method_missing(sym, *args)
|
85
|
-
@logger.debug("AntTask.method_missing sym[#{sym.to_s}]")
|
86
97
|
begin
|
87
|
-
|
88
|
-
|
89
|
-
@logger.debug("Creating a 1.5. task")
|
90
|
-
task = Ant15Task.new(sym.to_s, @project_wrapper, args[0], proc)
|
91
|
-
else
|
92
|
-
task = AntTask.new(sym.to_s, @project_wrapper, args[0], proc)
|
93
|
-
end
|
94
|
-
|
98
|
+
@logger.debug("AntTask.method_missing sym[#{sym.to_s}]")
|
99
|
+
task = AntTask.new(sym.to_s, @project_wrapper, args[0], block_given? ? Proc.new : nil)
|
95
100
|
self.add(task)
|
96
101
|
rescue StandardError
|
97
102
|
@logger.error("AntTask.method_missing error:" + $!)
|
@@ -99,7 +104,7 @@ class AntTask
|
|
99
104
|
end
|
100
105
|
|
101
106
|
def add(child)
|
102
|
-
@logger.debug("adding child[#{child.
|
107
|
+
@logger.debug("adding child[#{child.taskname}] to [#{@taskname}]")
|
103
108
|
@unknown_element.addChild(child.unknown_element())
|
104
109
|
@unknown_element.getRuntimeConfigurableWrapper().addChild(child.unknown_element().getRuntimeConfigurableWrapper())
|
105
110
|
end
|
@@ -110,56 +115,14 @@ class AntTask
|
|
110
115
|
@executed = true
|
111
116
|
end
|
112
117
|
|
113
|
-
def
|
114
|
-
@
|
115
|
-
end
|
116
|
-
|
117
|
-
#overridden. 'mkdir' conflicts wth the rake library.
|
118
|
-
def mkdir(attributes)
|
119
|
-
create_task('mkdir', attributes, (block_given? ? Proc.new : nil))
|
120
|
-
end
|
121
|
-
|
122
|
-
#overridden. 'copy' conflicts wth the rake library.
|
123
|
-
def copy(attributes)
|
124
|
-
create_task('copy', attributes, (block_given? ? Proc.new : nil))
|
125
|
-
end
|
126
|
-
|
127
|
-
#overridden. 'java' conflicts wth the JRuby library.
|
128
|
-
def jvm(attributes=Hash.new)
|
129
|
-
create_task('java', attributes, (block_given? ? Proc.new : nil))
|
130
|
-
end
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
class Ant15Task < AntTask
|
135
|
-
|
136
|
-
def create_unknown_element(project, taskname)
|
137
|
-
unknown_element = ApacheAnt::UnknownElement.new(taskname)
|
138
|
-
unknown_element.project= project
|
139
|
-
unknown_element.owningTarget= ApacheAnt::Target.new()
|
140
|
-
unknown_element.taskName= taskname
|
141
|
-
return unknown_element
|
142
|
-
end
|
143
|
-
|
144
|
-
def addAttributes(attributes)
|
145
|
-
wrapper = ApacheAnt::RuntimeConfigurable.new(@unknown_element, @unknown_element.getTaskName());
|
146
|
-
@unknown_element.setRuntimeConfigurableWrapper(wrapper)
|
147
|
-
attribute_list = org.xml.sax.helpers.AttributeListImpl.new
|
148
|
-
|
149
|
-
attributes.each do |key, val|
|
150
|
-
if(key.to_s != 'pcdata')
|
151
|
-
attribute_list.addAttribute(key.to_s, 'CDATA', val)
|
152
|
-
else
|
153
|
-
wrapper.addText(val)
|
154
|
-
end
|
155
|
-
end unless attributes == nil
|
156
|
-
wrapper.setAttributes(attribute_list)
|
157
|
-
end
|
118
|
+
def to_s
|
119
|
+
return self.class.name + "[#{@taskname}]"
|
120
|
+
end
|
158
121
|
|
159
122
|
end
|
160
123
|
|
161
124
|
class AntProject
|
162
|
-
|
125
|
+
require 'logger'
|
163
126
|
attr :project, false
|
164
127
|
attr :version, false
|
165
128
|
attr :ant_version, true
|
@@ -196,8 +159,8 @@ class AntProject
|
|
196
159
|
self.declarative= options[:declarative] || true
|
197
160
|
default_logger = ApacheAnt::DefaultLogger.new
|
198
161
|
default_logger.messageOutputLevel= 2
|
199
|
-
default_logger.outputPrintStream= JavaLang::System.out
|
200
|
-
default_logger.errorPrintStream= JavaLang::System.err
|
162
|
+
default_logger.outputPrintStream= options[:outputstr] || JavaLang::System.out
|
163
|
+
default_logger.errorPrintStream= options[:errorstr] || JavaLang::System.err
|
201
164
|
default_logger.emacsMode= false
|
202
165
|
@project.addBuildListener default_logger
|
203
166
|
@version = ApacheAnt::Main.getAntVersion
|
@@ -211,25 +174,15 @@ class AntProject
|
|
211
174
|
@logger.debug("Antproject.create_task.taskname = " + taskname)
|
212
175
|
@logger.debug("Antproject.create_task.attributes = " + attributes.to_s)
|
213
176
|
|
214
|
-
task =
|
215
|
-
if(ant_version < 1.6)
|
216
|
-
task = Ant15Task.new(taskname, self, attributes, proc)
|
217
|
-
else
|
218
|
-
task = AntTask.new(taskname, self, attributes, proc)
|
219
|
-
end
|
220
|
-
|
177
|
+
task = AntTask.new(taskname, self, attributes, proc)
|
221
178
|
task.execute if declarative
|
222
|
-
|
223
|
-
@logger.debug("Pushing #{attributes[:name]} to tasks")
|
224
|
-
end
|
225
|
-
task
|
179
|
+
return task
|
226
180
|
end
|
227
181
|
|
228
182
|
def method_missing(sym, *args)
|
229
183
|
begin
|
230
|
-
@logger.
|
231
|
-
|
232
|
-
return create_task(sym.to_s, args[0], proc)
|
184
|
+
@logger.debug("AntProject.method_missing sym[#{sym.to_s}]")
|
185
|
+
return create_task(sym.to_s, args[0], block_given? ? Proc.new : nil)
|
233
186
|
rescue
|
234
187
|
@logger.error("Error instantiating task[#{sym.to_s}]" + $!)
|
235
188
|
end
|
@@ -243,19 +196,14 @@ class AntProject
|
|
243
196
|
return @project.getBaseDir().getAbsolutePath();
|
244
197
|
end
|
245
198
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
end
|
199
|
+
def to_s
|
200
|
+
return self.class.name + "[#{@project.name}]"
|
201
|
+
end
|
250
202
|
|
251
|
-
#
|
252
|
-
|
253
|
-
|
254
|
-
end
|
255
|
-
|
256
|
-
#overridden. 'java' conflicts wth the JRuby library.
|
257
|
-
def jvm(attributes=Hash.new)
|
203
|
+
#This method invokes create_task. It is here to prevent conflicts wth the JRuby library
|
204
|
+
#over the 'java' symbol.
|
205
|
+
def java(attributes=Hash.new)
|
258
206
|
create_task('java', attributes, (block_given? ? Proc.new : nil))
|
259
207
|
end
|
260
208
|
|
261
|
-
end
|
209
|
+
end
|
data/lib/rakefile.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'antwrap.rb'
|
2
|
+
|
3
|
+
module Raven
|
4
|
+
|
5
|
+
# The AntBuilderTask lets you execute Ant tasks directly from
|
6
|
+
# your rakefile. For example:
|
7
|
+
#
|
8
|
+
# ant 'runant' do
|
9
|
+
# echo(:text => "Using echo Ant task.")
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# This task is different from other Raven tasks because its
|
13
|
+
# body (or block if you prefer) isn't executed by Rake but
|
14
|
+
# within the Ant interpreter (AntBuilder). Therefore the
|
15
|
+
# task object isn't available within the code block as with
|
16
|
+
# other tasks.
|
17
|
+
#
|
18
|
+
# For more information about the syntax to use to call Ant
|
19
|
+
# tasks see http://antbuilder.rubyforge.org/
|
20
|
+
class AntBuilderTask < Rake::Task
|
21
|
+
attr_writer :body
|
22
|
+
|
23
|
+
def execute
|
24
|
+
super
|
25
|
+
current_dir = application.original_dir()
|
26
|
+
ant_project = AntProject.new({:name=>"testProject", :basedir=>current_dir, :declarative=>true,
|
27
|
+
:logger=>Logger.new(STDOUT), :loglevel=>Logger::ERROR})
|
28
|
+
ant_project.instance_eval(&@body)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def ant(args, &block)
|
34
|
+
ant_task = Raven::AntBuilderTask.define_task(args)
|
35
|
+
ant_task.body = block
|
36
|
+
end
|
37
|
+
|
38
|
+
ant 'runant' do
|
39
|
+
mkdir(:dir => 'foo')
|
40
|
+
echo(:message => "Using echo Ant task.")
|
41
|
+
echo(:pcdata => "Using echo Ant task.")
|
42
|
+
end
|
43
|
+
|
44
|
+
ant :ant_echo do
|
45
|
+
echo(:message => "Calling Ant <echo> task")
|
46
|
+
end
|
47
|
+
|
48
|
+
ant 'antcontrib' do
|
49
|
+
taskdef(:resource => "net/sf/antcontrib/antlib.xml")
|
50
|
+
|
51
|
+
property(:name => "bar", :value => "bar")
|
52
|
+
_if(){
|
53
|
+
equals(:arg1 => "${bar}", :arg2 => "bar")
|
54
|
+
_then(){
|
55
|
+
echo(:message => "if 1 is equal")
|
56
|
+
}
|
57
|
+
_else(){
|
58
|
+
echo(:message => "if 1 is not equal")
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
property(:name => "baz", :value => "foo")
|
63
|
+
_if(){
|
64
|
+
equals(:arg1 => "${baz}", :arg2 => "bar")
|
65
|
+
_then(){
|
66
|
+
echo(:message => "if 2 is equal")
|
67
|
+
}
|
68
|
+
_else(){
|
69
|
+
echo(:message => "if 2 is not equal")
|
70
|
+
}
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
ant 'macrodef' do
|
75
|
+
dir = 'foo'
|
76
|
+
|
77
|
+
assert_absent dir
|
78
|
+
|
79
|
+
macrodef(:name => 'testmacrodef'){
|
80
|
+
attribute(:name => 'destination')
|
81
|
+
sequential(){
|
82
|
+
echo(:message => "Creating @{destination}")
|
83
|
+
_mkdir(:dir => "@{destination}")
|
84
|
+
}
|
85
|
+
}
|
86
|
+
testmacrodef(:destination => dir)
|
87
|
+
assert_exists dir
|
88
|
+
|
89
|
+
puts "Cleaning up and deleting #{dir}"
|
90
|
+
|
91
|
+
Dir.delete dir
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
def assert_exists(file_path)
|
96
|
+
puts "Does not exist[#{file_path}]" if !File.exists?(file_path)
|
97
|
+
end
|
98
|
+
|
99
|
+
def assert_absent(file_path)
|
100
|
+
puts "Should not exist[#{file_path}]" if File.exists?(file_path)
|
101
|
+
end
|
Binary file
|
data/test/tc_antwrap.rb
CHANGED
@@ -7,6 +7,26 @@
|
|
7
7
|
require 'test/unit'
|
8
8
|
require 'fileutils'
|
9
9
|
require '../lib/antwrap.rb'
|
10
|
+
require 'java'
|
11
|
+
class TestStream < java.io.PrintStream
|
12
|
+
attr_reader :last_line
|
13
|
+
|
14
|
+
def initialise(out)
|
15
|
+
self.super(out)
|
16
|
+
end
|
17
|
+
|
18
|
+
def println(s)
|
19
|
+
puts "s"
|
20
|
+
@last_line = s
|
21
|
+
self.super(s)
|
22
|
+
end
|
23
|
+
|
24
|
+
def print(s)
|
25
|
+
puts "s"
|
26
|
+
@last_line = s
|
27
|
+
self.super(s)
|
28
|
+
end
|
29
|
+
end
|
10
30
|
|
11
31
|
class TestAntwrap < Test::Unit::TestCase
|
12
32
|
|
@@ -134,7 +154,7 @@ class TestAntwrap < Test::Unit::TestCase
|
|
134
154
|
|
135
155
|
@ant.property(:name => 'output_dir', :value => @output_dir)
|
136
156
|
@ant.property(:name => 'resource_dir', :value =>@resource_dir)
|
137
|
-
@ant.
|
157
|
+
@ant.java(:classname => 'foo.bar.FooBar', :fork => 'false') {
|
138
158
|
arg(:value => 'argOne')
|
139
159
|
classpath(){
|
140
160
|
pathelement(:location => '${output_dir}/classes')
|
@@ -147,7 +167,14 @@ class TestAntwrap < Test::Unit::TestCase
|
|
147
167
|
end
|
148
168
|
|
149
169
|
def test_echo_task
|
150
|
-
|
170
|
+
# stream = TestStream.new(java.lang.System.out)
|
171
|
+
#
|
172
|
+
# @ant = AntProject.new({:name=>"testProject", :basedir=>@current_dir, :declarative=>true,
|
173
|
+
# :logger=>Logger.new(STDOUT), :loglevel=>Logger::DEBUG, :outputstr => stream})
|
174
|
+
msg = "Antwrap is running an Echo task"
|
175
|
+
@ant.echo(:message => msg, :level => 'info')
|
176
|
+
# assert(stream.last_line, stream.last_line == msg)
|
177
|
+
|
151
178
|
@ant.echo(:pcdata => "<foo&bar>")
|
152
179
|
end
|
153
180
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: Antwrap
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2007-
|
6
|
+
version: "0.4"
|
7
|
+
date: 2007-03-04
|
8
8
|
summary: "A JRuby module that wraps the Apache Ant build tool, enabling Ant Tasks to be
|
9
9
|
invoked from a JRuby script."
|
10
10
|
require_paths:
|
@@ -30,12 +30,15 @@ authors:
|
|
30
30
|
files:
|
31
31
|
- lib/antwrap.rb
|
32
32
|
- lib/convert.rb
|
33
|
+
- lib/rakefile.rb
|
33
34
|
- test/output
|
34
35
|
- test/tc_antwrap.rb
|
35
36
|
- test/tc_convert.rb
|
36
|
-
- test/test
|
37
37
|
- test/test-resources
|
38
|
-
- test/
|
38
|
+
- test/output/META-INF
|
39
|
+
- test/output/parent
|
40
|
+
- test/output/META-INF/MANIFEST.MF
|
41
|
+
- test/output/parent/FooBarParent.class
|
39
42
|
- test/test-resources/build.xml
|
40
43
|
- test/test-resources/foo.txt
|
41
44
|
- test/test-resources/foo.zip
|