buildr-bnd 0.0.1 → 0.0.2

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/README.rdoc CHANGED
@@ -53,6 +53,33 @@ The extension sets the following bnd parameters;
53
53
  * -classpath is set to the compile target directory and any compile time
54
54
  dependencies.
55
55
 
56
+ == Parameters
57
+
58
+ === classpath_element
59
+
60
+ The user can also specify additional elements that are added to the classpath
61
+ using the 'classpath_element' method. If the parameter to this element is a
62
+ task, artifact, artifact namespace etc. then it will be resolved prior to invoking
63
+ bnd.
64
+
65
+ define 'foo' do
66
+ ...
67
+ package(:bundle).tap do |bnd|
68
+ # This dependency will be added to classpath
69
+ bnd.classpath_element 'someOtherExistingFile.zip'
70
+ # All of these dependencies will be invoked and added to classpath
71
+ bnd.classpath_element artifact('com.sun.messaging.mq:imq:jar:4.4')
72
+ bnd.classpath_element project('bar') # Adds all the packages
73
+ bnd.classpath_element 'org.apache.ant:ant:jar:1.8.0'
74
+ bnd.classpath_element file('myLocalFile.jar')
75
+ ...
76
+ end
77
+
78
+ project 'bar' do
79
+ ...
80
+ end
81
+ end
82
+
56
83
  == Examples
57
84
 
58
85
  === Using bnd to wrap an existing jar
@@ -69,10 +96,10 @@ example wraps the OpenMQ JMS provider as an OSGi bundle.
69
96
  define 'com.sun.messaging.mq.imq' do
70
97
  project.version = '4.4'
71
98
  project.group = 'iris'
72
- compile.with 'com.sun.messaging.mq:imq:jar:4.4'
73
99
  package(:bundle).tap do |bnd|
74
100
  bnd['Import-Package'] = "*;resolution:=optional"
75
101
  bnd['Export-Package'] = "com.sun.messaging.*;version=#{version}"
102
+ bnd.classpath_element 'com.sun.messaging.mq:imq:jar:4.4'
76
103
  end
77
104
  end
78
105
 
@@ -127,27 +154,6 @@ parameter withy a local value.
127
154
  end
128
155
  end
129
156
 
130
- == Future Work
131
-
132
- === Dependencies
133
-
134
- Currently you need to declare all dependencies required by bnd as a compile dependency via
135
- "compile.with X" even if they are not compile time dependencies but are just included in the
136
- bundle otherwise these resources may not be uptodate when the bnd tool is invoked. An option
137
- for improving this situation is something like the following code;
138
-
139
- # Will invoke dependencies before packaging
140
- define 'foo' do
141
- bnd.dependency artifact('com.sun.messaging.mq:imq:jar:4.4')
142
- bnd.dependency project('bar')
143
- ...
144
- package :bundle
145
-
146
- project 'bar' do
147
- ...
148
- end
149
- end
150
-
151
157
  == Credit
152
158
 
153
159
  The plugin was heavily inspired by the bnd tasks originally authored by Rhett Sutphin. It began
data/lib/buildr_bnd.rb CHANGED
@@ -22,7 +22,7 @@ module Buildr
22
22
  end
23
23
 
24
24
  class BundleTask < Rake::FileTask
25
- attr_accessor :project
25
+ attr_reader :project
26
26
 
27
27
  def [](key)
28
28
  @params[key]
@@ -32,9 +32,17 @@ module Buildr
32
32
  @params[key] = value
33
33
  end
34
34
 
35
+ def classpath_element(dependencies)
36
+ artifacts = self.class.to_artifacts([dependencies])
37
+ self.prerequisites << artifacts
38
+ artifacts.each do |dependency|
39
+ @classpath << dependency.to_s
40
+ end
41
+ end
42
+
35
43
  def to_params
36
44
  params = project.manifest.merge(@params).reject { |k, v| v.nil? }
37
- params["-classpath"] ||= ([project.compile.target] + project.compile.dependencies).collect(&:to_s).join(", ")
45
+ params["-classpath"] ||= @classpath.collect(&:to_s).join(", ")
38
46
  params['Bundle-SymbolicName'] ||= [project.group, project.name.gsub(':', '.')].join('.')
39
47
  params['Bundle-Name'] ||= project.comment || project.name
40
48
  params['Bundle-Description'] ||= project.comment
@@ -45,8 +53,37 @@ module Buildr
45
53
  params
46
54
  end
47
55
 
56
+ def project=(project)
57
+ @project = project
58
+ @classpath = [project.compile.target] + project.compile.dependencies
59
+ end
60
+
48
61
  protected
49
62
 
63
+ # Convert objects to artifacts, where applicable
64
+ def self.to_artifacts(files)
65
+ files.flatten.inject([]) do |set, file|
66
+ case file
67
+ when ArtifactNamespace
68
+ set |= file.artifacts
69
+ when Symbol, Hash
70
+ set |= [Buildr.artifact(file)]
71
+ when /([^:]+:){2,4}/ # A spec as opposed to a file name.
72
+ set |= [Buildr.artifact(file)]
73
+ when Project
74
+ set |= Buildr.artifacts(file.packages)
75
+ when Rake::Task
76
+ set |= [file]
77
+ when Struct
78
+ set |= Buildr.artifacts(file.values)
79
+ else
80
+ # non-artifacts passed as-is; in particular, String paths are
81
+ # unmodified since Rake FileTasks don't use absolute paths
82
+ set |= [file]
83
+ end
84
+ end
85
+ end
86
+
50
87
  def initialize(*args) #:nodoc:
51
88
  super
52
89
  @params = {}
@@ -1,5 +1,19 @@
1
1
  require File.expand_path('../../../spec_helper', __FILE__)
2
2
 
3
+ def open_zip_file(file = 'target/foo-2.1.3.jar')
4
+ jar_filename = @foo._(file)
5
+ File.should be_exist(jar_filename)
6
+ Zip::ZipFile.open(jar_filename) do |zip|
7
+ yield zip
8
+ end
9
+ end
10
+
11
+ def open_main_manifest_section(file = 'target/foo-2.1.3.jar')
12
+ jar_filename = @foo._(file)
13
+ File.should be_exist(jar_filename)
14
+ yield Buildr::Packaging::Java::Manifest.from_zip(jar_filename).main
15
+ end
16
+
3
17
  describe "package :bundle" do
4
18
  describe "with a valid bundle" do
5
19
  before do
@@ -89,20 +103,6 @@ SRC
89
103
  attribs['Magic-Food'].should eql('Cheese')
90
104
  end
91
105
  end
92
-
93
- def open_zip_file(file = 'target/foo-2.1.3.jar')
94
- jar_filename = @foo._(file)
95
- File.should be_exist(jar_filename)
96
- Zip::ZipFile.open(jar_filename) do |zip|
97
- yield zip
98
- end
99
- end
100
-
101
- def open_main_manifest_section(file = 'target/foo-2.1.3.jar')
102
- jar_filename = @foo._(file)
103
- File.should be_exist(jar_filename)
104
- yield Buildr::Packaging::Java::Manifest.from_zip(jar_filename).main
105
- end
106
106
  end
107
107
 
108
108
  describe "with an invalid bundle" do
@@ -119,9 +119,59 @@ SRC
119
119
  lambda { task('package').invoke }.should raise_error
120
120
  end
121
121
 
122
- it "raise notp produce an invalid jar file" do
122
+ it "raise not produce an invalid jar file" do
123
123
  lambda { task('package').invoke }.should raise_error
124
124
  File.should_not be_exist(@foo._("target/foo-2.1.3.jar"))
125
125
  end
126
126
  end
127
+
128
+ describe "using classpath_element to specify dependency" do
129
+ before do
130
+ @foo = define "foo" do
131
+ project.version = "2.1.3"
132
+ project.group = "mygroup"
133
+ package(:bundle).tap do |bnd|
134
+ bnd['Export-Package'] = 'org.apache.tools.zip.*'
135
+ Buildr::Ant.dependencies.each do |d|
136
+ bnd.classpath_element d
137
+ end
138
+ end
139
+ end
140
+ end
141
+
142
+ it "should not raise an error during packaging" do
143
+ lambda { task('package').invoke }.should_not raise_error
144
+ end
145
+
146
+ it "should generate package with files exported from dependency" do
147
+ task('package').invoke
148
+ open_main_manifest_section do |attribs|
149
+ attribs['Export-Package'].should eql('org.apache.tools.zip')
150
+ end
151
+ end
152
+ end
153
+
154
+ describe "using compile dependencies to specify dependency" do
155
+ before do
156
+ @foo = define "foo" do
157
+ project.version = "2.1.3"
158
+ project.group = "mygroup"
159
+ compile.with Buildr::Ant.dependencies
160
+ package(:bundle).tap do |bnd|
161
+ bnd['Export-Package'] = 'org.apache.tools.zip.*'
162
+ end
163
+ end
164
+ end
165
+
166
+ it "should not raise an error during packaging" do
167
+ lambda { task('package').invoke }.should_not raise_error
168
+ end
169
+
170
+ it "should generate package with files exported from dependency" do
171
+ task('package').invoke
172
+ open_main_manifest_section do |attribs|
173
+ attribs['Export-Package'].should eql('org.apache.tools.zip')
174
+ end
175
+ end
176
+ end
127
177
  end
@@ -0,0 +1,52 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ DEPENDENCY_NAME = 'group:id:jar:1.0'
4
+
5
+ describe "Buildr:Bnd:BundleTask.to_artifacts" do
6
+ before do
7
+ @artifact = artifact(DEPENDENCY_NAME) { |t| write t.to_s }
8
+ @foo = define "foo" do
9
+ project.version = "1.1"
10
+ compile.with DEPENDENCY_NAME
11
+ package :zip
12
+ end
13
+
14
+ @bar = define "bar" do
15
+ project.version = "1.1"
16
+ compile.with DEPENDENCY_NAME
17
+ package :zip
18
+ package :jar
19
+ end
20
+ end
21
+
22
+ it "flattens nested arrays" do
23
+ to_artifacts([["foo"]]).should eql(['foo'])
24
+ end
25
+
26
+ it "turns projects into tasks to build projects" do
27
+ artifacts = to_artifacts([@foo])
28
+ artifacts.length.should eql(1)
29
+ artifacts[0].should be_a_kind_of(Rake::Task)
30
+ artifacts[0].to_s.should match(/foo-1\.1\.zip/)
31
+
32
+ artifacts = to_artifacts([@bar])
33
+ artifacts.length.should eql(2)
34
+ artifacts.each do |artifact|
35
+ artifact.should be_a_kind_of(Rake::Task)
36
+ artifact.to_s.should match(/bar-1\.1\.(zip|jar)/)
37
+ end
38
+ end
39
+
40
+ it "converts hashes into artifacts" do
41
+ artifacts = to_artifacts([{:group => 'group', :id => 'id', :version => '1.0', :type => 'jar'}])
42
+ artifacts.length.should eql(1)
43
+ artifacts[0].should be_a_kind_of(Rake::Task)
44
+ artifacts[0].to_s.should match(/group\/id\/1.0\/id-1\.0\.jar/)
45
+ end
46
+
47
+ protected
48
+
49
+ def to_artifacts(args)
50
+ Buildr::Bnd::BundleTask.to_artifacts(args)
51
+ end
52
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Peter Donald
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-17 00:00:00 +10:00
17
+ date: 2010-04-18 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -37,6 +37,7 @@ files:
37
37
  - spec/buildr/bnd/project_extension_spec.rb
38
38
  - spec/buildr/bnd/bundle_package_spec.rb
39
39
  - spec/buildr/bnd/defaults_spec.rb
40
+ - spec/buildr/bnd/to_artifacts_spec.rb
40
41
  - buildr-bnd.gemspec
41
42
  - LICENSE
42
43
  - README.rdoc
@@ -48,7 +49,7 @@ licenses: []
48
49
  post_install_message:
49
50
  rdoc_options:
50
51
  - --title
51
- - buildr-bnd 0.0.1
52
+ - buildr-bnd 0.0.2
52
53
  - --main
53
54
  - README.rdoc
54
55
  require_paths: