buildr-gemjar 1.0.2 → 1.1.0

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.
@@ -1,3 +1,15 @@
1
+ 1.1.0
2
+ =====
3
+
4
+ - Added: JARs which are embedded in gems which are being packaged by
5
+ buildr-gemjar can be unpacked into the result JAR. The default
6
+ behavior is to unpack any JARs found under `lib` in the gem, but
7
+ this can be changed with an option on `with_gem`. See the README for
8
+ more details. (#4)
9
+
10
+ - Fixed: When invoking `gem install` check the exit status (in
11
+ addition to scanning the output) to detect failures. (#2)
12
+
1
13
  1.0.2
2
14
  =====
3
15
 
data/README.md CHANGED
@@ -54,6 +54,32 @@ You can also include a gem for which you have a `.gem` package:
54
54
 
55
55
  [buildr-package]: http://buildr.apache.org/packaging.html
56
56
 
57
+ ### JARs embedded in gems
58
+
59
+ Many gems that are intended for use in JRuby embed one or more JARs
60
+ containing "native" java code. [jruby-openssl][] is a popular example
61
+ of this practice. If these jars are embedded as-is into the gemjar,
62
+ they won't be visible to ruby code.
63
+
64
+ To resolve this, `buildr-gemjar` will unpack any jar found under the
65
+ lib directory of any installed gem (including dependent gems) and
66
+ include its contents in the gemjar directly. You can control this
67
+ behavior for an individual gem with the `:unpack_jars` option to
68
+ `with_gems`. It can be set to one of the following values:
69
+
70
+ * an array of globs; e.g., `["lib/shared/**/*.jar"]`. Each glob will be
71
+ applied at the root of the installed gem's contents and each match
72
+ will be unpacked into the gemjar.
73
+ * `true`. Equivalent to `["lib/**/*.jar"]`. This is the default.
74
+ * `false`. Do not unpack any jars from this gem.
75
+
76
+ The default is `:unpack_jars => true`. Note that you can only apply
77
+ different unpack behavior for gems which are explicitly included via
78
+ `with_gem`. Any transitively installed gems will have the default
79
+ unpack behavior (i.e., unpack every JAR under lib) applied.
80
+
81
+ [jruby-openssl]: https://rubygems.org/gems/jruby-openssl
82
+
57
83
  Caveats
58
84
  -------
59
85
 
@@ -63,6 +89,9 @@ were named `sinatra.jar`, it would not be possible to `require
63
89
  "sinatra"` from it. (This is a general JRuby requirement, not
64
90
  something that's specific to this tool.)
65
91
 
92
+ Embedded JARs will not have any of their metadata (manifests, META-INF
93
+ service registrations, etc.) preserved if they are unpacked.
94
+
66
95
  Compatibility
67
96
  -------------
68
97
 
@@ -99,7 +128,7 @@ For bugs and feature requests, please use the [github issue
99
128
  tracker][issues]. For other questions, please use the [buildr users
100
129
  mailing list][buildrusers] or e-mail [me][] directly.
101
130
 
102
- [issues]: https://github.com/rsutphin/buildr-gemjar/issues
131
+ [issues]: https://github.com/NUBIC/buildr-gemjar/issues
103
132
  [buildrusers]: http://buildr.apache.org/mailing_lists.html
104
133
  [me]: mailto:rhett@detailedbalance.net
105
134
 
@@ -1,31 +1,40 @@
1
1
  require 'buildr/java/packaging'
2
+ require 'pathname'
2
3
 
3
4
  module BuildrGemjar
4
5
  class GemjarTask < Buildr::Packaging::Java::JarTask
6
+ DEFAULT_UNPACK_GLOBS = ['lib/**/*.jar']
7
+
5
8
  def initialize(*args)
6
9
  super
7
- @target = File.expand_path("../gem_home", self.to_s)
10
+ @target = Pathname.new File.expand_path("../gem_home", self.to_s)
8
11
  # It doesn't seem like this should be necessary or useful --
9
12
  # the directory is also created by a task dependency.
10
13
  # However, if it isn't here, the file gem dependency is not
11
14
  # correctly taken into account. (Try commenting it out and
12
15
  # running the specs.)
13
- mkdir_p @target
16
+ @target.mkpath
14
17
 
15
18
  clean
16
- include(@target, :as => '.')
19
+ include(@target.to_s, :as => '.')
17
20
  enhance do
18
21
  install_gems
22
+ unpack_jars
19
23
  end
20
24
  end
21
25
 
22
26
  def with_gem(*args)
27
+ options = args.last.respond_to?(:has_key?) ? args.pop : {}
28
+
23
29
  new_gem =
24
- if args.first.respond_to?(:has_key?)
25
- FileSourcedGem.new(args.first[:file])
30
+ if options.has_key?(:file)
31
+ FileSourcedGem.new(options[:file])
26
32
  else
27
33
  NamedGem.new(args[0], args[1])
28
34
  end
35
+
36
+ new_gem.unpack_globs = determine_unpack_globs(options[:unpack_jars])
37
+
29
38
  gems << new_gem
30
39
  enhance new_gem.dependencies
31
40
  self
@@ -86,13 +95,77 @@ module BuildrGemjar
86
95
  trace cmd
87
96
  out = %x[#{cmd} 2>&1]
88
97
  trace out
89
- if out =~ /ERROR/
98
+ if $? != 0
99
+ fail "gem invocation failed:\n#{out}"
100
+ elsif out =~ /ERROR/
90
101
  fail out.split("\n").grep(/ERROR/).join("\n")
91
102
  end
92
103
  end
93
104
  end
94
105
 
106
+ def determine_unpack_globs(unpack_jars_option)
107
+ unpack_jars_option = true if unpack_jars_option.nil?
108
+
109
+ case unpack_jars_option
110
+ when true
111
+ DEFAULT_UNPACK_GLOBS
112
+ when false
113
+ []
114
+ else
115
+ [*unpack_jars_option]
116
+ end
117
+ end
118
+
119
+ def unpack_jars
120
+ all_gem_roots = (gem_home + 'gems').children
121
+ requested_gem_roots = gems.collect { |gem| gem.install_root(gem_home) }.compact
122
+ other_gem_roots = all_gem_roots - requested_gem_roots
123
+
124
+ FileUtils.cd gem_home do
125
+ other_gem_roots.each do |root|
126
+ unpack_gem_jars(root, DEFAULT_UNPACK_GLOBS)
127
+ end
128
+ gems.each do |gem|
129
+ unpack_gem_jars(gem.install_root(gem_home), gem.unpack_globs)
130
+ end
131
+ end
132
+ end
133
+
134
+ def unpack_gem_jars(installed_root, jar_globs)
135
+ jar_globs.each do |glob|
136
+ Dir[installed_root + glob].each do |jar|
137
+ trace "Unpacking #{jar}"
138
+ cmd = [
139
+ 'jar',
140
+ 'xf',
141
+ jar
142
+ ].join(' ')
143
+ trace cmd
144
+ out = %x[#{cmd} 2>&1]
145
+ if $? != 0
146
+ fail "jar extraction failed:\n#{out}"
147
+ else
148
+ trace out
149
+ end
150
+ FileUtils.rm_rf 'META-INF'
151
+ end
152
+ end
153
+ end
154
+
155
+ module GemProperties
156
+ attr_accessor :unpack_globs
157
+
158
+ ##
159
+ # If the gem is installed in the given gem home, this method
160
+ # gives the path to its expanded root under `{gem_home}/gems`.
161
+ def install_root(gem_home)
162
+ (gem_home + 'gems').children.detect { |p| p.to_s =~ /#{name}-#{version}/ }
163
+ end
164
+ end
165
+
95
166
  class FileSourcedGem
167
+ include GemProperties
168
+
96
169
  attr_accessor :filename
97
170
 
98
171
  def initialize(filename)
@@ -108,9 +181,26 @@ module BuildrGemjar
108
181
  def dependencies
109
182
  [(filename if File.exist?(filename))].compact
110
183
  end
184
+
185
+ def name
186
+ spec.name
187
+ end
188
+
189
+ def version
190
+ spec.version
191
+ end
192
+
193
+ def spec
194
+ require 'rubygems/specification'
195
+
196
+ @spec ||= YAML.load(`tar xOf '#{filename}' metadata.gz | gunzip`)
197
+ end
198
+ private :spec
111
199
  end
112
200
 
113
201
  class NamedGem
202
+ include GemProperties
203
+
114
204
  attr_accessor :name, :version
115
205
 
116
206
  def initialize(name, version)
@@ -160,8 +250,8 @@ module BuildrGemjar
160
250
  jruby = project.artifact(BuildrGemjar.jruby_artifact)
161
251
  project.packages.each do |pkg|
162
252
  if pkg.is_a?(GemjarTask)
163
- directory pkg.gem_home
164
- pkg.enhance [pkg.gem_home, jruby]
253
+ directory pkg.gem_home.to_s
254
+ pkg.enhance [pkg.gem_home.to_s, jruby]
165
255
  BuildrGemjar.jruby_complete_jar = jruby.to_s
166
256
  end
167
257
  end
@@ -1,3 +1,3 @@
1
1
  module BuildrGemjar
2
- VERSION = "1.0.2"
2
+ VERSION = '1.1.0'
3
3
  end
@@ -45,6 +45,58 @@ describe ":gemjar packaging" do
45
45
 
46
46
  actual_gems.collect { |g| g.kind }.should == [:named, :file, :named]
47
47
  end
48
+
49
+ describe ':unpack_jars' do
50
+ shared_examples_for 'a gem with unpack behavior' do
51
+ let(:gem) {
52
+ a = args
53
+ define('foo', :version => '1.0') {
54
+ package(:gemjar).with_gem(*a)
55
+ }
56
+ actual_gems.first
57
+ }
58
+
59
+ it 'defaults to true' do
60
+ gem.unpack_globs.should == ['lib/**/*.jar']
61
+ end
62
+
63
+ it 'interprets true as "lib/**/*.jar"' do
64
+ args.last[:unpack_jars] = true
65
+ gem.unpack_globs.should == ['lib/**/*.jar']
66
+ end
67
+
68
+ it 'interprets false as no globs' do
69
+ args.last[:unpack_jars] = false
70
+ gem.unpack_globs.should == []
71
+ end
72
+
73
+ it 'passes through an array' do
74
+ expected = %w(lib/shared/*.jar ext/**/*.jar)
75
+ args.last[:unpack_jars] = expected
76
+
77
+ gem.unpack_globs.should == expected
78
+ end
79
+
80
+ it 'wraps a single value into an array' do
81
+ expected = 'ext/**/*.jar'
82
+ args.last[:unpack_jars] = expected
83
+
84
+ gem.unpack_globs.should == [expected]
85
+ end
86
+ end
87
+
88
+ describe 'with a named gem' do
89
+ let(:args) { ['jruby-openssl', '0.7.5', {}] }
90
+
91
+ it_behaves_like 'a gem with unpack behavior'
92
+ end
93
+
94
+ describe 'with a file-sourced gem' do
95
+ let(:args) { [{ :file => 'snapshot.gem' }] }
96
+
97
+ it_behaves_like 'a gem with unpack behavior'
98
+ end
99
+ end
48
100
  end
49
101
 
50
102
  describe "sources" do
@@ -190,11 +242,27 @@ describe ":gemjar packaging" do
190
242
  File.exist?(path).should be_true
191
243
  end
192
244
 
245
+ def manifest_text_from(jarfile)
246
+ require 'zip/zipfilesystem'
247
+
248
+ Zip::ZipFile.open(jarfile) do |zfs|
249
+ zfs.file.read('META-INF/MANIFEST.MF')
250
+ end
251
+ end
252
+
253
+ it 'includes directly specified manifest properties' do
254
+ actual = test_package { |p|
255
+ p.with_gem('a').with :manifest => { 'Bundle-SymbolicName' => 'foo-bar' }
256
+ }
257
+
258
+ manifest_text_from(actual).should include("Bundle-SymbolicName: foo-bar")
259
+ end
260
+
193
261
  describe "with gems in GEM_PATH" do
194
262
  before do
195
263
  gem_path_entry = tmp('gem_path')
196
264
  system("GEM_HOME='#{gem_path_entry}' gem install --source 'file://#{repo_path}' --no-rdoc --no-ri -q a > '#{tmp('install_out')}'")
197
- ENV['GEM_PATH'] = gem_path_entry
265
+ ENV['GEM_PATH'] = gem_path_entry.to_s
198
266
  end
199
267
 
200
268
  it "installs all dependencies, including ones in the GEM_PATH" do
@@ -202,6 +270,73 @@ describe ":gemjar packaging" do
202
270
  should be_a_jar_containing("specifications/a-1.0.gemspec")
203
271
  end
204
272
  end
273
+
274
+ describe 'with jars to unpack' do
275
+ shared_examples_for 'a gem including jars' do
276
+ let(:pkg) { test_package { |p| p.with_gem(*args).with :manifest => { 'Foo' => 'Bar' } } }
277
+
278
+ it 'unpacks jars under lib by default' do
279
+ pkg.should be_a_jar_containing('org/example/jr/lib.properties')
280
+ end
281
+
282
+ it 'does not unpack other jars by default' do
283
+ pkg.should_not be_a_jar_containing('org/example/jr/ext.properties')
284
+ end
285
+
286
+ describe 'with a glob' do
287
+ before do
288
+ args.last[:unpack_jars] = 'ext/**/*.jar'
289
+ end
290
+
291
+ it 'unpacks the requested jars' do
292
+ pkg.should be_a_jar_containing('org/example/jr/ext.properties')
293
+ end
294
+
295
+ it 'does not unpack other jars' do
296
+ pkg.should_not be_a_jar_containing('org/example/jr/lib.properties')
297
+ end
298
+ end
299
+
300
+ it 'unpacks everything for each glob' do
301
+ args.last[:unpack_jars] = ['ext/**/*.jar', 'lib/*.jar']
302
+ pkg.should be_a_jar_containing(
303
+ 'org/example/jr/ext.properties', 'org/example/jr/lib.properties')
304
+ end
305
+
306
+ it 'unpacks nothing when :unpack_jars is false' do
307
+ args.last[:unpack_jars] = false
308
+ pkg.should_not be_a_jar_containing('org')
309
+ end
310
+
311
+ it 'does not include the manifest from unpacked jars' do
312
+ manifest_text_from(pkg).should_not include('Main-Class')
313
+ end
314
+ end
315
+
316
+ describe 'a named gem' do
317
+ let(:args) { ['jr', '1.0', {}] }
318
+
319
+ it_behaves_like 'a gem including jars'
320
+ end
321
+
322
+ describe 'a file-sourced gem' do
323
+ let(:args) { [{ :file => (repo_path + 'gems' + 'jr-1.0-java.gem').to_s}] }
324
+
325
+ it_behaves_like 'a gem including jars'
326
+ end
327
+
328
+ describe 'with jars in dependencies' do
329
+ let(:pkg) { test_package { |p| p.with_gem('jr-user') } }
330
+
331
+ it 'unpacks jars under lib' do
332
+ pkg.should be_a_jar_containing('org/example/jr/lib.properties')
333
+ end
334
+
335
+ it 'does not unpack other jars' do
336
+ pkg.should_not be_a_jar_containing('org/example/jr/ext.properties')
337
+ end
338
+ end
339
+ end
205
340
  end
206
341
  end
207
342
 
@@ -23,26 +23,70 @@ module BuildrGemjar
23
23
  create_gem "jr", "1.0" do |s|
24
24
  s.platform = 'java'
25
25
  s.add_dependency "b"
26
+ s.files = [
27
+ create_jar('lib/jr.jar', %w(org/example/jr/lib.properties), 'org.example.jar.Main'),
28
+ create_jar('ext/jr.jar', %w(org/example/jr/ext.properties))
29
+ ]
30
+ end
31
+
32
+ create_gem 'jr-user' do |s|
33
+ s.add_dependency 'jr'
26
34
  end
27
35
 
28
36
  `gem generate_index -q --directory '#{repo_path}'`
29
37
  end
30
38
 
31
39
  def create_gem(name, version='1.0', opts={})
32
- spec = Gem::Specification.new do |s|
33
- s.name = name
34
- s.version = version
35
- s.summary = "A fake #{name}"
36
- end
37
- yield spec if block_given?
38
-
39
40
  target = opts[:path] || repo_path.join("gems")
40
41
  mkdir_p target
41
42
  cd target do
43
+ spec = Gem::Specification.new do |s|
44
+ s.name = name
45
+ s.version = version
46
+ s.summary = "A fake #{name}"
47
+ end
48
+ yield spec if block_given?
49
+
50
+ Gem.configuration.verbose = false
42
51
  Gem::Builder.new(spec).build
52
+ Gem.configuration.verbose = true
53
+
54
+ spec.files.each do |f|
55
+ rm_rf f
56
+ end
43
57
  end
44
58
  end
45
59
 
60
+ # main_class is an option because it's a cheap way to get
61
+ # something specific to this jar into the manifest
62
+ def create_jar(path, filenames, main_class=nil)
63
+ mkdir File.dirname(path)
64
+
65
+ staging = tmp('jar-staging')
66
+ staging.mkpath
67
+ filenames.each do |fn|
68
+ pn = staging + fn
69
+ pn.dirname.mkpath
70
+ pn.open('w') { }
71
+ end
72
+
73
+ cmd = [
74
+ 'jar',
75
+ main_class ? 'cfe' : 'cf',
76
+ "'#{path}'",
77
+ main_class,
78
+ "-C",
79
+ "'#{staging}'",
80
+ '.'
81
+ ].compact.join(' ')
82
+
83
+ out = %x[#{cmd} 2>&1]
84
+ fail "create_jar failed:\n#{out}" unless $? == 0
85
+
86
+ staging.rmtree
87
+ path
88
+ end
89
+
46
90
  def tmp(*path)
47
91
  Pathname.new(File.expand_path("../../tmp", __FILE__)).join(*path)
48
92
  end
metadata CHANGED
@@ -2,12 +2,12 @@
2
2
  name: buildr-gemjar
3
3
  version: !ruby/object:Gem::Version
4
4
  hash: 19
5
- prerelease:
5
+ prerelease: false
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 1.0.2
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rhett Sutphin
@@ -15,13 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-15 00:00:00 -05:00
18
+ date: 2012-02-09 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: braid
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
23
  none: false
26
24
  requirements:
27
25
  - - ~>
@@ -31,12 +29,12 @@ dependencies:
31
29
  - 0
32
30
  - 6
33
31
  version: "0.6"
32
+ requirement: *id001
34
33
  type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: ci_reporter
34
+ name: braid
38
35
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
36
+ - !ruby/object:Gem::Dependency
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
38
  none: false
41
39
  requirements:
42
40
  - - ~>
@@ -46,12 +44,12 @@ dependencies:
46
44
  - 1
47
45
  - 6
48
46
  version: "1.6"
47
+ requirement: *id002
49
48
  type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: rake
49
+ name: ci_reporter
53
50
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
51
+ - !ruby/object:Gem::Dependency
52
+ version_requirements: &id003 !ruby/object:Gem::Requirement
55
53
  none: false
56
54
  requirements:
57
55
  - - "="
@@ -62,12 +60,12 @@ dependencies:
62
60
  - 8
63
61
  - 7
64
62
  version: 0.8.7
63
+ requirement: *id003
65
64
  type: :development
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- name: builder
65
+ name: rake
69
66
  prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
67
+ - !ruby/object:Gem::Dependency
68
+ version_requirements: &id004 !ruby/object:Gem::Requirement
71
69
  none: false
72
70
  requirements:
73
71
  - - "="
@@ -78,12 +76,12 @@ dependencies:
78
76
  - 1
79
77
  - 2
80
78
  version: 2.1.2
79
+ requirement: *id004
81
80
  type: :development
82
- version_requirements: *id004
83
- - !ruby/object:Gem::Dependency
84
- name: net-ssh
81
+ name: builder
85
82
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
83
+ - !ruby/object:Gem::Dependency
84
+ version_requirements: &id005 !ruby/object:Gem::Requirement
87
85
  none: false
88
86
  requirements:
89
87
  - - "="
@@ -94,12 +92,12 @@ dependencies:
94
92
  - 0
95
93
  - 23
96
94
  version: 2.0.23
95
+ requirement: *id005
97
96
  type: :development
98
- version_requirements: *id005
99
- - !ruby/object:Gem::Dependency
100
- name: net-sftp
97
+ name: net-ssh
101
98
  prerelease: false
102
- requirement: &id006 !ruby/object:Gem::Requirement
99
+ - !ruby/object:Gem::Dependency
100
+ version_requirements: &id006 !ruby/object:Gem::Requirement
103
101
  none: false
104
102
  requirements:
105
103
  - - "="
@@ -110,12 +108,12 @@ dependencies:
110
108
  - 0
111
109
  - 4
112
110
  version: 2.0.4
111
+ requirement: *id006
113
112
  type: :development
114
- version_requirements: *id006
115
- - !ruby/object:Gem::Dependency
116
- name: rubyzip
113
+ name: net-sftp
117
114
  prerelease: false
118
- requirement: &id007 !ruby/object:Gem::Requirement
115
+ - !ruby/object:Gem::Dependency
116
+ version_requirements: &id007 !ruby/object:Gem::Requirement
119
117
  none: false
120
118
  requirements:
121
119
  - - "="
@@ -126,12 +124,12 @@ dependencies:
126
124
  - 9
127
125
  - 4
128
126
  version: 0.9.4
127
+ requirement: *id007
129
128
  type: :development
130
- version_requirements: *id007
131
- - !ruby/object:Gem::Dependency
132
- name: highline
129
+ name: rubyzip
133
130
  prerelease: false
134
- requirement: &id008 !ruby/object:Gem::Requirement
131
+ - !ruby/object:Gem::Dependency
132
+ version_requirements: &id008 !ruby/object:Gem::Requirement
135
133
  none: false
136
134
  requirements:
137
135
  - - "="
@@ -142,12 +140,12 @@ dependencies:
142
140
  - 5
143
141
  - 1
144
142
  version: 1.5.1
143
+ requirement: *id008
145
144
  type: :development
146
- version_requirements: *id008
147
- - !ruby/object:Gem::Dependency
148
- name: json_pure
145
+ name: highline
149
146
  prerelease: false
150
- requirement: &id009 !ruby/object:Gem::Requirement
147
+ - !ruby/object:Gem::Dependency
148
+ version_requirements: &id009 !ruby/object:Gem::Requirement
151
149
  none: false
152
150
  requirements:
153
151
  - - "="
@@ -158,12 +156,12 @@ dependencies:
158
156
  - 4
159
157
  - 3
160
158
  version: 1.4.3
159
+ requirement: *id009
161
160
  type: :development
162
- version_requirements: *id009
163
- - !ruby/object:Gem::Dependency
164
- name: rubyforge
161
+ name: json_pure
165
162
  prerelease: false
166
- requirement: &id010 !ruby/object:Gem::Requirement
163
+ - !ruby/object:Gem::Dependency
164
+ version_requirements: &id010 !ruby/object:Gem::Requirement
167
165
  none: false
168
166
  requirements:
169
167
  - - "="
@@ -174,12 +172,12 @@ dependencies:
174
172
  - 0
175
173
  - 3
176
174
  version: 2.0.3
175
+ requirement: *id010
177
176
  type: :development
178
- version_requirements: *id010
179
- - !ruby/object:Gem::Dependency
180
- name: hoe
177
+ name: rubyforge
181
178
  prerelease: false
182
- requirement: &id011 !ruby/object:Gem::Requirement
179
+ - !ruby/object:Gem::Dependency
180
+ version_requirements: &id011 !ruby/object:Gem::Requirement
183
181
  none: false
184
182
  requirements:
185
183
  - - "="
@@ -190,12 +188,12 @@ dependencies:
190
188
  - 3
191
189
  - 3
192
190
  version: 2.3.3
191
+ requirement: *id011
193
192
  type: :development
194
- version_requirements: *id011
195
- - !ruby/object:Gem::Dependency
196
- name: rjb
193
+ name: hoe
197
194
  prerelease: false
198
- requirement: &id012 !ruby/object:Gem::Requirement
195
+ - !ruby/object:Gem::Dependency
196
+ version_requirements: &id012 !ruby/object:Gem::Requirement
199
197
  none: false
200
198
  requirements:
201
199
  - - "="
@@ -206,12 +204,12 @@ dependencies:
206
204
  - 3
207
205
  - 3
208
206
  version: 1.3.3
207
+ requirement: *id012
209
208
  type: :development
210
- version_requirements: *id012
211
- - !ruby/object:Gem::Dependency
212
- name: atoulme-Antwrap
209
+ name: rjb
213
210
  prerelease: false
214
- requirement: &id013 !ruby/object:Gem::Requirement
211
+ - !ruby/object:Gem::Dependency
212
+ version_requirements: &id013 !ruby/object:Gem::Requirement
215
213
  none: false
216
214
  requirements:
217
215
  - - "="
@@ -222,12 +220,12 @@ dependencies:
222
220
  - 7
223
221
  - 1
224
222
  version: 0.7.1
223
+ requirement: *id013
225
224
  type: :development
226
- version_requirements: *id013
227
- - !ruby/object:Gem::Dependency
228
- name: rspec
225
+ name: atoulme-Antwrap
229
226
  prerelease: false
230
- requirement: &id014 !ruby/object:Gem::Requirement
227
+ - !ruby/object:Gem::Dependency
228
+ version_requirements: &id014 !ruby/object:Gem::Requirement
231
229
  none: false
232
230
  requirements:
233
231
  - - ~>
@@ -238,12 +236,12 @@ dependencies:
238
236
  - 1
239
237
  - 0
240
238
  version: 2.1.0
239
+ requirement: *id014
241
240
  type: :development
242
- version_requirements: *id014
243
- - !ruby/object:Gem::Dependency
244
- name: xml-simple
241
+ name: rspec
245
242
  prerelease: false
246
- requirement: &id015 !ruby/object:Gem::Requirement
243
+ - !ruby/object:Gem::Dependency
244
+ version_requirements: &id015 !ruby/object:Gem::Requirement
247
245
  none: false
248
246
  requirements:
249
247
  - - "="
@@ -254,12 +252,12 @@ dependencies:
254
252
  - 0
255
253
  - 12
256
254
  version: 1.0.12
255
+ requirement: *id015
257
256
  type: :development
258
- version_requirements: *id015
259
- - !ruby/object:Gem::Dependency
260
- name: minitar
257
+ name: xml-simple
261
258
  prerelease: false
262
- requirement: &id016 !ruby/object:Gem::Requirement
259
+ - !ruby/object:Gem::Dependency
260
+ version_requirements: &id016 !ruby/object:Gem::Requirement
263
261
  none: false
264
262
  requirements:
265
263
  - - "="
@@ -270,8 +268,10 @@ dependencies:
270
268
  - 5
271
269
  - 3
272
270
  version: 0.5.3
271
+ requirement: *id016
273
272
  type: :development
274
- version_requirements: *id016
273
+ name: minitar
274
+ prerelease: false
275
275
  description:
276
276
  email:
277
277
  - rhett@detailedbalance.net
@@ -563,7 +563,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
563
563
  requirements: []
564
564
 
565
565
  rubyforge_project: buildr-gemjar
566
- rubygems_version: 1.5.2
566
+ rubygems_version: 1.3.7
567
567
  signing_key:
568
568
  specification_version: 3
569
569
  summary: Provides buildr support for packaging gems in a JAR for JRuby