buildr-gemjar 1.0.2 → 1.1.0

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