buildr4osgi 0.9.2 → 0.9.3
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/buildr4osgi.gemspec +2 -2
- data/lib/buildr4osgi.rb +2 -0
- data/lib/buildr4osgi/compile.rb +2 -1
- data/lib/buildr4osgi/compile/compiler.rb +1 -3
- data/lib/buildr4osgi/compile/external.rb +71 -0
- data/lib/buildr4osgi/eclipse.rb +3 -1
- data/lib/buildr4osgi/eclipse/feature.rb +12 -7
- data/lib/buildr4osgi/eclipse/p2.rb +137 -0
- data/lib/buildr4osgi/eclipse/site.rb +207 -0
- data/lib/buildr4osgi/osgi/bundle.rb +17 -12
- data/lib/buildr4osgi/osgi/bundle_package.rb +35 -11
- data/lib/buildr4osgi/osgi/container.rb +1 -0
- data/lib/buildr4osgi/osgi/execution_environment.rb +199 -0
- data/lib/buildr4osgi/osgi/library_extension.rb +14 -1
- data/lib/buildr4osgi/osgi/packaging_sources.rb +4 -0
- data/lib/buildr4osgi/osgi/project_extension.rb +59 -20
- data/lib/buildr4osgi/osgi/registry.rb +23 -29
- data/lib/buildr4osgi/osgi/resolving_strategies.rb +1 -0
- data/lib/buildr4osgi/osgi/version.rb +1 -1
- data/rakelib/all-in-one.rake +84 -0
- data/rakelib/stage.rake +5 -4
- data/spec/compile/external_spec.rb +41 -0
- data/spec/eclipse/p2_spec.rb +65 -0
- data/spec/eclipse/site_spec.rb +94 -0
- data/spec/osgi/bundle_package_spec.rb +13 -1
- data/spec/osgi/bundle_spec.rb +2 -2
- data/spec/osgi/execution_environment_spec.rb +48 -0
- data/spec/osgi/library_extension_spec.rb +15 -2
- data/spec/osgi/project_extension_spec.rb +86 -18
- data/spec/osgi/registry_spec.rb +30 -20
- data/spec/osgi/resolving_strategies_spec.rb +2 -2
- data/spec/osgi/version_spec.rb +6 -0
- data/spec/spec_helpers.rb +12 -0
- metadata +12 -16
- data/spec/tmp/remote/eclipse/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.jar +0 -0
- data/spec/tmp/remote/eclipse/org.eclipse.debug.ui/3.4.1.v20080811_r341/org.eclipse.debug.ui-3.4.1.v20080811_r341.pom +0 -82
- data/spec/tmp/remote/log4j/log4j/1.2.15/log4j-1.2.15.jar +0 -0
- data/spec/tmp/remote/log4j/log4j/1.2.15/log4j-1.2.15.pom +0 -478
- data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8-sources.jar +0 -0
- data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8.jar +0 -0
- data/spec/tmp/remote/org/slf4j/jcl104-over-slf4j/1.5.8/jcl104-over-slf4j-1.5.8.pom +0 -30
- data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8-sources.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.pom +0 -101
- data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8-sources.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar +0 -0
- data/spec/tmp/remote/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.pom +0 -56
@@ -120,7 +120,7 @@ module OSGi #:nodoc:
|
|
120
120
|
|
121
121
|
#Read the imports
|
122
122
|
imports = []
|
123
|
-
manifest.first[B_IMPORT_PKG].each_pair {|key, value| imports << BundlePackage.new(key.strip, value["version"], :is_export => false)} unless manifest.first[B_IMPORT_PKG].nil?
|
123
|
+
manifest.first[B_IMPORT_PKG].each_pair {|key, value| imports << BundlePackage.new(key.strip, value["version"], :is_export => false, :optional => value[B_RESOLUTION] == "optional")} unless manifest.first[B_IMPORT_PKG].nil?
|
124
124
|
|
125
125
|
#Read the imported packages
|
126
126
|
|
@@ -175,22 +175,20 @@ module OSGi #:nodoc:
|
|
175
175
|
|
176
176
|
|
177
177
|
#
|
178
|
-
# Resolves the matching artifacts
|
178
|
+
# Resolves the matching artifacts.
|
179
179
|
#
|
180
|
-
def resolve_matching_artifacts
|
180
|
+
def resolve_matching_artifacts
|
181
181
|
# Collect the bundle projects, duplicate them so no changes can be applied to them
|
182
182
|
# and extend them with the BundleProjectMatcher module
|
183
183
|
|
184
184
|
b_projects = BundleProjects::bundle_projects.select {|p|
|
185
|
-
|
186
|
-
|
187
|
-
p.matches(:name => name, :version => version)
|
188
|
-
end
|
185
|
+
p.extend BundleProjectMatcher
|
186
|
+
p.matches(:name => name, :version => version)
|
189
187
|
}
|
190
188
|
#projects take precedence over the dependencies elsewhere, that's what happens in Eclipse
|
191
189
|
# for example
|
192
190
|
return b_projects unless b_projects.empty?
|
193
|
-
return
|
191
|
+
return OSGi.registry.resolved_containers.collect {|i|
|
194
192
|
i.find(:name => name, :version => version)
|
195
193
|
}.flatten.compact.collect{|b| b.dup }
|
196
194
|
end
|
@@ -220,12 +218,12 @@ module OSGi #:nodoc:
|
|
220
218
|
# Resolve a bundle from itself, by finding the appropriate bundle in the OSGi containers.
|
221
219
|
# Returns self or the project it represents if a project is found to be self.
|
222
220
|
#
|
223
|
-
def resolve(
|
221
|
+
def resolve(bundles = resolve_matching_artifacts)
|
224
222
|
bundle = case bundles.size
|
225
223
|
when 0 then nil
|
226
224
|
when 1 then bundles.first
|
227
225
|
else
|
228
|
-
BundleResolvingStrategies.send(
|
226
|
+
BundleResolvingStrategies.send(OSGi.options.bundle_resolving_strategy, bundles)
|
229
227
|
end
|
230
228
|
if bundle.nil?
|
231
229
|
warn "Could not resolve bundle for #{self.to_s}"
|
@@ -247,8 +245,8 @@ module OSGi #:nodoc:
|
|
247
245
|
|
248
246
|
# Finds the fragments associated with this bundle.
|
249
247
|
#
|
250
|
-
def fragments
|
251
|
-
|
248
|
+
def fragments
|
249
|
+
OSGi.registry.resolved_containers.collect {|i|
|
252
250
|
i.find_fragments(:host => name).select{|f|
|
253
251
|
if f.fragment.version.is_a? VersionRange
|
254
252
|
f.fragment.version.in_range(version)
|
@@ -268,6 +266,13 @@ module OSGi #:nodoc:
|
|
268
266
|
end
|
269
267
|
|
270
268
|
alias :eql? ==
|
269
|
+
|
270
|
+
# Important for maps.
|
271
|
+
# We absolutely want to avoid having to resolve several times the same bundle
|
272
|
+
#
|
273
|
+
def hash
|
274
|
+
return to_s.hash
|
275
|
+
end
|
271
276
|
|
272
277
|
end
|
273
278
|
end
|
@@ -19,12 +19,19 @@ module OSGi #:nodoc:
|
|
19
19
|
# Created from the Import-Package or Provide-Package (Export-Package) header.
|
20
20
|
#
|
21
21
|
class BundlePackage
|
22
|
-
attr_accessor :name, :version, :bundles, :imports, :is_export
|
22
|
+
attr_accessor :name, :version, :bundles, :imports, :is_export, :original_version, :optional
|
23
23
|
|
24
24
|
def initialize(name, version, args = {}) #:nodoc:
|
25
25
|
@name= name
|
26
26
|
@is_export = args[:is_export]
|
27
|
-
@
|
27
|
+
@optional = args[:optional]
|
28
|
+
@original_version = version
|
29
|
+
if version
|
30
|
+
v = version.gsub(/\"/, '')
|
31
|
+
v = VersionRange.parse(v, true)
|
32
|
+
v ||= v
|
33
|
+
@version = v
|
34
|
+
end
|
28
35
|
@bundles = args[:bundles] || []
|
29
36
|
@imports = args[:imports] || []
|
30
37
|
end
|
@@ -32,31 +39,41 @@ module OSGi #:nodoc:
|
|
32
39
|
#
|
33
40
|
# Resolves the matching artifacts associated with the project.
|
34
41
|
#
|
35
|
-
def resolve_matching_artifacts
|
42
|
+
def resolve_matching_artifacts
|
36
43
|
# Collect the bundle projects
|
37
44
|
# and extend them with the BundleProjectMatcher module
|
38
45
|
b_projects = BundleProjects::bundle_projects.select {|p|
|
39
|
-
|
40
|
-
|
41
|
-
p.matches(:exports_package => name, :version => version)
|
42
|
-
end
|
46
|
+
p.extend BundleProjectMatcher
|
47
|
+
p.matches(:exports_package => name, :version => version)
|
43
48
|
}
|
49
|
+
warn "*** SPLIT PACKAGE: #{self} is exported by more than one project: <#{b_projects.join(", ")}> ABORTING!" if b_projects.size > 1
|
44
50
|
return b_projects unless b_projects.empty?
|
45
51
|
|
46
|
-
resolved =
|
52
|
+
resolved = OSGi.registry.resolved_containers.collect {|i| i.find(:exports_package => name, :version => version)}
|
47
53
|
resolved.flatten.compact.collect{|b| b.dup}
|
48
54
|
end
|
49
55
|
|
50
56
|
# Resolves the bundles that export this package.
|
51
57
|
#
|
52
|
-
def resolve(
|
58
|
+
def resolve(bundles = resolve_matching_artifacts)
|
53
59
|
bundles = case bundles.size
|
54
60
|
when 0 then []
|
55
61
|
when 1 then bundles
|
56
62
|
else
|
57
|
-
bundles =
|
63
|
+
bundles = PackageResolvingStrategies.send(OSGi.options.package_resolving_strategy, name, bundles)
|
64
|
+
end
|
65
|
+
if bundles.empty?
|
66
|
+
|
67
|
+
return [] if OSGi.is_framework_package?(name) # Is the bundle part of the packages provided by default ?
|
68
|
+
|
69
|
+
|
70
|
+
trace "original version: #{original_version}"
|
71
|
+
if optional
|
72
|
+
info "No bundles found exporting the optional package #{name};version=#{version} (#{original_version})"
|
73
|
+
else
|
74
|
+
warn "No bundles found exporting the package #{name};version=#{version} (#{original_version})"
|
75
|
+
end
|
58
76
|
end
|
59
|
-
warn "No bundles found exporting the package #{name}; version=#{version}" if (bundles.empty?)
|
60
77
|
bundles
|
61
78
|
|
62
79
|
end
|
@@ -65,6 +82,13 @@ module OSGi #:nodoc:
|
|
65
82
|
"Package #{name}; version #{version}"
|
66
83
|
end
|
67
84
|
|
85
|
+
# Important for maps.
|
86
|
+
# We absolutely want to avoid having to resolve several times the same package
|
87
|
+
#
|
88
|
+
def hash
|
89
|
+
return to_s.hash
|
90
|
+
end
|
91
|
+
|
68
92
|
# We just test the name and version as we want to be able to see if an unresolved package and a resolved one represent the same
|
69
93
|
# bundle package.
|
70
94
|
def ==(other)
|
@@ -41,6 +41,7 @@ module OSGi #:nodoc:
|
|
41
41
|
warn "Folder #{p_loc_complete} not found!" if !File.exists? p_loc_complete
|
42
42
|
parse(p_loc_complete) if File.exists? p_loc_complete
|
43
43
|
end
|
44
|
+
info("Done parsing #{location}")
|
44
45
|
end
|
45
46
|
|
46
47
|
# Parses the directory and grabs the plugins, adding the created bundle objects to @bundles.
|
@@ -0,0 +1,199 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
module OSGi
|
17
|
+
|
18
|
+
# The notion of profile in OSGi refers to the execution environment: SDK, loaded libraries in LD_LIBRARY_PATH.
|
19
|
+
# A set of default execution environments is defined by the OSGi specifications.
|
20
|
+
class ExecutionEnvironment
|
21
|
+
|
22
|
+
attr_reader :name, :description, :packages
|
23
|
+
|
24
|
+
def initialize(name, description, packages)
|
25
|
+
@name = name
|
26
|
+
@description = description
|
27
|
+
@packages = packages.is_a?(Array) ? packages : [packages]
|
28
|
+
@packages.freeze
|
29
|
+
freeze
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
# No profile.
|
35
|
+
NONE = ExecutionEnvironment.new("None", "None", [])
|
36
|
+
|
37
|
+
# The standard CDC-1.0/Foundation-1.0 profile
|
38
|
+
CDC10FOUNDATION10 = ExecutionEnvironment.new("CDC-1.0/Foundation-1.0", "Equal to J2ME Foundation Profile", ["javax.microedition.io"])
|
39
|
+
|
40
|
+
# The standard CDC-1.0/Foundation-1.1 profile
|
41
|
+
CDC10FOUNDATION11 = ExecutionEnvironment.new("CDC-1.0/Foundation-1.1", "Equal to J2ME Foundation Profile", ["javax.microedition.io","javax.microedition.pki",
|
42
|
+
"javax.security.auth.x500"])
|
43
|
+
|
44
|
+
# The standard J2SE-1.2 profile
|
45
|
+
J2SE12 = ExecutionEnvironment.new("J2SE-1.2", "Java 2 Platform, Standard Edition 1.2", %w{javax.accessibility javax.swing javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.filechooser
|
46
|
+
javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi javax.swing.table javax.swing.text javax.swing.text.html
|
47
|
+
javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree javax.swing.undo org.omg.CORBA org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage
|
48
|
+
org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage org.omg.CosNaming org.omg.CosNaming.NamingContextPackage})
|
49
|
+
|
50
|
+
# The standard J2SE-1.3 profile
|
51
|
+
J2SE13 = ExecutionEnvironment.new("J2SE-1.3", "Java 2 Platform, Standard Edition 1.3", %w{javax.accessibility javax.naming javax.naming.directory javax.naming.event javax.naming.ldap
|
52
|
+
javax.naming.spi javax.rmi javax.rmi.CORBA javax.sound.midi javax.sound.midi.spi javax.sound.sampled javax.sound.sampled.spi javax.swing javax.swing.border
|
53
|
+
javax.swing.colorchooser javax.swing.event javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi
|
54
|
+
javax.swing.table javax.swing.text javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree javax.swing.undo javax.transaction
|
55
|
+
org.omg.CORBA org.omg.CORBA_2_3 org.omg.CORBA_2_3.portable org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage org.omg.CORBA.portable
|
56
|
+
org.omg.CORBA.TypeCodePackage org.omg.CosNaming org.omg.CosNaming.NamingContextPackage org.omg.SendingContext org.omg.stub.java.rmi})
|
57
|
+
|
58
|
+
# The standard J2SE-1.4 profile
|
59
|
+
J2SE14 = ExecutionEnvironment.new("J2SE-1.4", "Java 2 Platform, Standard Edition 1.4", %w{javax.accessibility javax.crypto javax.crypto.interfaces javax.crypto.spec javax.imageio
|
60
|
+
javax.imageio.event javax.imageio.metadata javax.imageio.plugins.jpeg javax.imageio.spi javax.imageio.stream javax.naming javax.naming.directory javax.naming.event
|
61
|
+
javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax.rmi
|
62
|
+
javax.rmi.CORBA javax.security.auth javax.security.auth.callback javax.security.auth.kerberos javax.security.auth.login javax.security.auth.spi
|
63
|
+
javax.security.auth.x500 javax.security.cert javax.sound.midi javax.sound.midi.spi javax.sound.sampled javax.sound.sampled.spi javax.sql javax.swing
|
64
|
+
javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal
|
65
|
+
javax.swing.plaf.multi javax.swing.table javax.swing.text javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree
|
66
|
+
javax.swing.undo javax.transaction javax.transaction.xa javax.xml.parsers javax.xml.transform javax.xml.transform.dom javax.xml.transform.sax
|
67
|
+
javax.xml.transform.stream org.ietf.jgss org.omg.CORBA org.omg.CORBA_2_3 org.omg.CORBA_2_3.portable org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage
|
68
|
+
org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage org.omg.CosNaming org.omg.CosNaming.NamingContextExtPackage org.omg.CosNaming.NamingContextPackage
|
69
|
+
org.omg.Dynamic org.omg.DynamicAny org.omg.DynamicAny.DynAnyFactoryPackage org.omg.DynamicAny.DynAnyPackage org.omg.IOP org.omg.IOP.CodecFactoryPackage
|
70
|
+
org.omg.IOP.CodecPackage org.omg.Messaging org.omg.PortableInterceptor org.omg.PortableInterceptor.ORBInitInfoPackage org.omg.PortableServer
|
71
|
+
org.omg.PortableServer.CurrentPackage org.omg.PortableServer.POAManagerPackage org.omg.PortableServer.POAPackage org.omg.PortableServer.portable
|
72
|
+
org.omg.PortableServer.ServantLocatorPackage org.omg.SendingContext org.omg.stub.java.rmi org.w3c.dom org.w3c.dom.css org.w3c.dom.events
|
73
|
+
org.w3c.dom.html org.w3c.dom.stylesheets org.w3c.dom.views org.xml.sax org.xml.sax.ext org.xml.sax.helpers})
|
74
|
+
|
75
|
+
# The standard J2SE-1.5 profile
|
76
|
+
J2SE15 = ExecutionEnvironment.new("J2SE-1.5", "Java 2 Platform, Standard Edition 5.0", %w{javax.accessibility javax.activity javax.crypto javax.crypto.interfaces
|
77
|
+
javax.crypto.spec javax.imageio javax.imageio.event
|
78
|
+
javax.imageio.metadata javax.imageio.plugins.bmp javax.imageio.plugins.jpeg javax.imageio.spi javax.imageio.stream javax.management javax.management.loading
|
79
|
+
javax.management.modelmbean javax.management.monitor javax.management.openmbean javax.management.relation javax.management.remote javax.management.remote.rmi
|
80
|
+
javax.management.timer javax.naming javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print
|
81
|
+
javax.print.attribute javax.print.attribute.standard javax.print.event javax.rmi javax.rmi.CORBA javax.rmi.ssl javax.security.auth javax.security.auth.callback
|
82
|
+
javax.security.auth.kerberos javax.security.auth.login javax.security.auth.spi javax.security.auth.x500 javax.security.cert javax.security.sasl javax.sound.midi
|
83
|
+
javax.sound.midi.spi javax.sound.sampled javax.sound.sampled.spi javax.sql javax.sql.rowset javax.sql.rowset.serial javax.sql.rowset.spi javax.swing
|
84
|
+
javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal
|
85
|
+
javax.swing.plaf.multi javax.swing.plaf.synth javax.swing.table javax.swing.text javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf
|
86
|
+
javax.swing.tree javax.swing.undo javax.transaction javax.transaction.xa javax.xml javax.xml.datatype javax.xml.namespace javax.xml.parsers javax.xml.transform
|
87
|
+
javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stream javax.xml.validation javax.xml.xpath org.ietf.jgss org.omg.CORBA org.omg.CORBA_2_3
|
88
|
+
org.omg.CORBA_2_3.portable org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage org.omg.CosNaming
|
89
|
+
org.omg.CosNaming.NamingContextExtPackage org.omg.CosNaming.NamingContextPackage org.omg.Dynamic org.omg.DynamicAny org.omg.DynamicAny.DynAnyFactoryPackage
|
90
|
+
org.omg.DynamicAny.DynAnyPackage org.omg.IOP org.omg.IOP.CodecFactoryPackage org.omg.IOP.CodecPackage org.omg.Messaging org.omg.PortableInterceptor
|
91
|
+
org.omg.PortableInterceptor.ORBInitInfoPackage org.omg.PortableServer org.omg.PortableServer.CurrentPackage org.omg.PortableServer.POAManagerPackage
|
92
|
+
org.omg.PortableServer.POAPackage org.omg.PortableServer.portable org.omg.PortableServer.ServantLocatorPackage org.omg.SendingContext org.omg.stub.java.rmi
|
93
|
+
org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.css org.w3c.dom.events org.w3c.dom.html org.w3c.dom.ls org.w3c.dom.ranges org.w3c.dom.stylesheets
|
94
|
+
org.w3c.dom.traversal org.w3c.dom.views org.xml.sax org.xml.sax.ext org.xml.sax.helpers})
|
95
|
+
|
96
|
+
# The standard JavaSE-1.6 profile
|
97
|
+
JAVASE16 = ExecutionEnvironment.new("JavaSE-1.6", "Java Platform, Standard Edition 6.0", %w{javax.accessibility javax.activation javax.activity
|
98
|
+
javax.annotation javax.annotation.processing javax.crypto javax.crypto.interfaces
|
99
|
+
javax.crypto.spec javax.imageio javax.imageio.event javax.imageio.metadata javax.imageio.plugins.bmp javax.imageio.plugins.jpeg javax.imageio.spi
|
100
|
+
javax.imageio.stream javax.jws javax.jws.soap javax.lang.model javax.lang.model.element javax.lang.model.type javax.lang.model.util javax.management
|
101
|
+
javax.management.loading javax.management.modelmbean javax.management.monitor javax.management.openmbean javax.management.relation javax.management.remote
|
102
|
+
javax.management.remote.rmi javax.management.timer javax.naming javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.net
|
103
|
+
javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax.rmi javax.rmi.CORBA javax.rmi.ssl javax.script
|
104
|
+
javax.security.auth javax.security.auth.callback javax.security.auth.kerberos javax.security.auth.login javax.security.auth.spi javax.security.auth.x500
|
105
|
+
javax.security.cert javax.security.sasl javax.sound.midi javax.sound.midi.spi javax.sound.sampled javax.sound.sampled.spi javax.sql javax.sql.rowset
|
106
|
+
javax.sql.rowset.serial javax.sql.rowset.spi javax.swing javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.filechooser
|
107
|
+
javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi javax.swing.plaf.synth javax.swing.table javax.swing.text
|
108
|
+
javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree javax.swing.undo javax.tools javax.transaction
|
109
|
+
javax.transaction.xa javax.xml javax.xml.bind javax.xml.bind.annotation javax.xml.bind.annotation.adapters javax.xml.bind.attachment
|
110
|
+
javax.xml.bind.helpers javax.xml.bind.util javax.xml.crypto javax.xml.crypto.dom javax.xml.crypto.dsig javax.xml.crypto.dsig.dom
|
111
|
+
javax.xml.crypto.dsig.keyinfo javax.xml.crypto.dsig.spec javax.xml.datatype javax.xml.namespace javax.xml.parsers javax.xml.soap javax.xml.stream
|
112
|
+
javax.xml.stream.events javax.xml.stream.util javax.xml.transform javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stax
|
113
|
+
javax.xml.transform.stream javax.xml.validation javax.xml.ws javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap
|
114
|
+
javax.xml.ws.spi javax.xml.xpath org.ietf.jgss org.omg.CORBA org.omg.CORBA_2_3 org.omg.CORBA_2_3.portable org.omg.CORBA.DynAnyPackage
|
115
|
+
org.omg.CORBA.ORBPackage org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage org.omg.CosNaming org.omg.CosNaming.NamingContextExtPackage
|
116
|
+
org.omg.CosNaming.NamingContextPackage org.omg.Dynamic org.omg.DynamicAny org.omg.DynamicAny.DynAnyFactoryPackage org.omg.DynamicAny.DynAnyPackage
|
117
|
+
org.omg.IOP org.omg.IOP.CodecFactoryPackage org.omg.IOP.CodecPackage org.omg.Messaging org.omg.PortableInterceptor
|
118
|
+
org.omg.PortableInterceptor.ORBInitInfoPackage org.omg.PortableServer org.omg.PortableServer.CurrentPackage org.omg.PortableServer.POAManagerPackage
|
119
|
+
org.omg.PortableServer.POAPackage org.omg.PortableServer.portable org.omg.PortableServer.ServantLocatorPackage org.omg.SendingContext
|
120
|
+
org.omg.stub.java.rmi org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.css org.w3c.dom.events org.w3c.dom.html org.w3c.dom.ls org.w3c.dom.ranges
|
121
|
+
org.w3c.dom.stylesheets org.w3c.dom.traversal org.w3c.dom.views org.xml.sax org.xml.sax.ext org.xml.sax.helpers})
|
122
|
+
|
123
|
+
JAVASE17 = ExecutionEnvironment.new("JavaSE-1.7", "Java SE 1.7.x (early access)", %w{javax.accessibility javax.activation javax.activity javax.annotation javax.annotation.processing
|
124
|
+
javax.crypto javax.crypto.interfaces javax.crypto.spec javax.imageio javax.imageio.event javax.imageio.metadata javax.imageio.plugins.bmp
|
125
|
+
javax.imageio.plugins.jpeg javax.imageio.spi javax.imageio.stream javax.jws javax.jws.soap javax.lang.model javax.lang.model.element javax.lang.model.type
|
126
|
+
javax.lang.model.util javax.management javax.management.loading javax.management.modelmbean javax.management.monitor javax.management.openmbean
|
127
|
+
javax.management.relation javax.management.remote javax.management.remote.rmi javax.management.timer javax.naming javax.naming.directory javax.naming.event
|
128
|
+
javax.naming.ldap javax.naming.spi javax.net javax.net.ssl javax.print javax.print.attribute javax.print.attribute.standard javax.print.event javax.rmi
|
129
|
+
javax.rmi.CORBA javax.rmi.ssl javax.script javax.security.auth javax.security.auth.callback javax.security.auth.kerberos javax.security.auth.login
|
130
|
+
javax.security.auth.spi javax.security.auth.x500 javax.security.cert javax.security.sasl javax.sound.midi javax.sound.midi.spi javax.sound.sampled
|
131
|
+
javax.sound.sampled.spi javax.sql javax.sql.rowset javax.sql.rowset.serial javax.sql.rowset.spi javax.swing javax.swing.border javax.swing.colorchooser
|
132
|
+
javax.swing.event javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi javax.swing.plaf.synth
|
133
|
+
javax.swing.table javax.swing.text javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree javax.swing.undo javax.tools
|
134
|
+
javax.transaction javax.transaction.xa javax.xml javax.xml.bind javax.xml.bind.annotation javax.xml.bind.annotation.adapters javax.xml.bind.attachment
|
135
|
+
javax.xml.bind.helpers javax.xml.bind.util javax.xml.crypto javax.xml.crypto.dom javax.xml.crypto.dsig javax.xml.crypto.dsig.dom javax.xml.crypto.dsig.keyinfo
|
136
|
+
javax.xml.crypto.dsig.spec javax.xml.datatype javax.xml.namespace javax.xml.parsers javax.xml.soap javax.xml.stream javax.xml.stream.events javax.xml.stream.util
|
137
|
+
javax.xml.transform javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stax javax.xml.transform.stream javax.xml.validation javax.xml.ws
|
138
|
+
javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap javax.xml.ws.spi javax.xml.xpath org.ietf.jgss org.omg.CORBA org.omg.CORBA_2_3
|
139
|
+
org.omg.CORBA_2_3.portable org.omg.CORBA.DynAnyPackage org.omg.CORBA.ORBPackage org.omg.CORBA.portable org.omg.CORBA.TypeCodePackage org.omg.CosNaming
|
140
|
+
org.omg.CosNaming.NamingContextExtPackage org.omg.CosNaming.NamingContextPackage org.omg.Dynamic org.omg.DynamicAny org.omg.DynamicAny.DynAnyFactoryPackage
|
141
|
+
org.omg.DynamicAny.DynAnyPackage org.omg.IOP org.omg.IOP.CodecFactoryPackage org.omg.IOP.CodecPackage org.omg.Messaging org.omg.PortableInterceptor
|
142
|
+
org.omg.PortableInterceptor.ORBInitInfoPackage org.omg.PortableServer org.omg.PortableServer.CurrentPackage org.omg.PortableServer.POAManagerPackage
|
143
|
+
org.omg.PortableServer.POAPackage org.omg.PortableServer.portable org.omg.PortableServer.ServantLocatorPackage org.omg.SendingContext org.omg.stub.java.rmi
|
144
|
+
org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.css org.w3c.dom.events org.w3c.dom.html org.w3c.dom.ls org.w3c.dom.ranges org.w3c.dom.stylesheets
|
145
|
+
org.w3c.dom.traversal org.w3c.dom.views org.xml.sax org.xml.sax.ext org.xml.sax.helpers})
|
146
|
+
|
147
|
+
OSGIMINIMUM10 = ExecutionEnvironment.new("OSGi/Minimum-1.0", "OSGi EE that is a minimal set that allows the implementation of an OSGi Framework", [])
|
148
|
+
OSGIMINIMUM11 = ExecutionEnvironment.new("OSGi/Minimum-1.1", "OSGi EE that is a minimal set that allows the implementation of an OSGi Framework", [])
|
149
|
+
OSGIMINIMUM12 = ExecutionEnvironment.new("OSGi/Minimum-1.2", "OSGi EE that is a minimal set that allows the implementation of an OSGi Framework", [])
|
150
|
+
|
151
|
+
# The execution environment configuration class
|
152
|
+
# represents how to dispose of execution environments.
|
153
|
+
# The default execution environments are initialized in the constructor.
|
154
|
+
#
|
155
|
+
class ExecutionEnvironmentConfiguration
|
156
|
+
|
157
|
+
attr_accessor :extra_packages, :execution_environment
|
158
|
+
|
159
|
+
# Constructor
|
160
|
+
def initialize
|
161
|
+
@extra_packages = []
|
162
|
+
@available_ee = {}
|
163
|
+
|
164
|
+
register_execution_environment(NONE)
|
165
|
+
register_execution_environment(CDC10FOUNDATION10)
|
166
|
+
register_execution_environment(CDC10FOUNDATION11)
|
167
|
+
register_execution_environment(J2SE12)
|
168
|
+
register_execution_environment(J2SE13)
|
169
|
+
register_execution_environment(J2SE14)
|
170
|
+
register_execution_environment(J2SE15)
|
171
|
+
register_execution_environment(JAVASE16)
|
172
|
+
register_execution_environment(JAVASE17)
|
173
|
+
register_execution_environment(OSGIMINIMUM10)
|
174
|
+
register_execution_environment(OSGIMINIMUM11)
|
175
|
+
register_execution_environment(OSGIMINIMUM12)
|
176
|
+
|
177
|
+
@execution_environment = JAVASE16.name
|
178
|
+
end
|
179
|
+
|
180
|
+
#
|
181
|
+
# Returns the current execution environment.
|
182
|
+
# By default we return JavaSE-1.6
|
183
|
+
#
|
184
|
+
def current_execution_environment
|
185
|
+
@available_ee[@execution_environment]
|
186
|
+
end
|
187
|
+
|
188
|
+
# Registers an execution enviroment in the configuration.
|
189
|
+
# This method should be used to register additional execution environments using an extension.
|
190
|
+
#
|
191
|
+
def register_execution_environment(ee)
|
192
|
+
raise "Cannot register this execution environment" unless ee.is_a? ExecutionEnvironment
|
193
|
+
available_ee[ee.name] = ee
|
194
|
+
end
|
195
|
+
|
196
|
+
attr_accessor :available_ee
|
197
|
+
|
198
|
+
end
|
199
|
+
end
|
@@ -103,6 +103,8 @@ module Buildr4OSGi #:nodoc:
|
|
103
103
|
#
|
104
104
|
def library_project(dependencies, group, name, version, options = {:exclude => ["META-INF/MANIFEST.MF"], :include => [], :manifest => {}})
|
105
105
|
options[:manifest] ||= {}
|
106
|
+
options[:include] ||= []
|
107
|
+
options[:exclude] ||= []
|
106
108
|
deps_as_str = []
|
107
109
|
# We create an object and we extend with the module so we can get access to the walk_libs method.
|
108
110
|
walker = Object.new
|
@@ -134,7 +136,18 @@ module Buildr4OSGi #:nodoc:
|
|
134
136
|
walk_libs(#{deps_as_str}) {|lib|
|
135
137
|
names << lib.to_spec
|
136
138
|
lib.invoke # make sure the artifact is present.
|
137
|
-
Zip::ZipFile.foreach(lib.to_s) {|entry|
|
139
|
+
Zip::ZipFile.foreach(lib.to_s) {|entry|
|
140
|
+
if /.*\\.class$/.match(entry.name)
|
141
|
+
add_to_entries = true
|
142
|
+
[#{options[:exclude].inspect}].flatten.each {|excluded|
|
143
|
+
add_to_entries &&= !entry.name.match(excluded)
|
144
|
+
}
|
145
|
+
[#{options[:include].inspect}].flatten.each {|included|
|
146
|
+
add_to_entries &&= included.match(entry.name)
|
147
|
+
}
|
148
|
+
entries << entry.name.sub(/(.*)\\/.*.class$/, '\\1').gsub(/\\//, '.') if add_to_entries
|
149
|
+
end
|
150
|
+
}
|
138
151
|
}
|
139
152
|
lib_manifest = {
|
140
153
|
"Bundle-Version" => "#{version}",
|
@@ -15,9 +15,13 @@
|
|
15
15
|
|
16
16
|
module OSGi
|
17
17
|
|
18
|
+
# FIXME this code should not be here, it should not be under OSGi directly.
|
18
19
|
# generate an Eclipse-SourceBundle manifest from the manifest of a runtime plugin
|
19
20
|
# Assumes that there are no jars inside the runtime plugin.
|
20
21
|
def self.create_source_bundle_manifest(pluginManifest)
|
22
|
+
if pluginManifest.is_a?(::Buildr::Packaging::Java::Manifest)
|
23
|
+
pluginManifest = pluginManifest.main
|
24
|
+
end
|
21
25
|
#remove the properties after the sym-name such as ';singleton=true'
|
22
26
|
bundleSymName = pluginManifest["Bundle-SymbolicName"].split(';').first
|
23
27
|
bundleVersion = pluginManifest["Bundle-Version"]
|
@@ -16,6 +16,11 @@
|
|
16
16
|
# Methods added to Project for compiling, handling of resources and generating source documentation.
|
17
17
|
module OSGi
|
18
18
|
|
19
|
+
MISSING = "missing"
|
20
|
+
|
21
|
+
RESOLVED = {}
|
22
|
+
|
23
|
+
|
19
24
|
module BundleCollector #:nodoc:
|
20
25
|
|
21
26
|
attr_accessor :bundles, :projects, :project_dependencies
|
@@ -24,38 +29,56 @@ module OSGi
|
|
24
29
|
# Returns them as a sorted array.
|
25
30
|
#
|
26
31
|
def collect(project)
|
32
|
+
info "** Collecting dependencies for #{project}"
|
27
33
|
@bundles = []
|
28
34
|
@projects = []
|
29
|
-
project.manifest_dependencies().each {|dep| _collect(dep
|
35
|
+
dependencies = project.manifest_dependencies().each {|dep| ; _collect(dep)}
|
36
|
+
@projects.delete project # Remove our own reference if it was added.
|
37
|
+
info "** Done collecting dependencies for #{project}"
|
38
|
+
return dependencies
|
30
39
|
end
|
31
40
|
|
32
41
|
# Collects the bundles associated with the bundle
|
33
42
|
#
|
34
|
-
def _collect(bundle
|
43
|
+
def _collect(bundle)
|
35
44
|
if bundle.is_a?(Bundle)
|
36
|
-
|
37
|
-
|
45
|
+
unless ::OSGi::RESOLVED[bundle]
|
46
|
+
resolved = bundle.resolve
|
47
|
+
trace "Resolving #{bundle}: #{resolved}"
|
48
|
+
::OSGi::RESOLVED[bundle] = resolved.nil? ? ::OSGi::MISSING : resolved
|
49
|
+
end
|
50
|
+
bundle = ::OSGi::RESOLVED[bundle]
|
51
|
+
unless bundle.nil? || bundle == ::OSGi::MISSING
|
38
52
|
if bundle.is_a?(Buildr::Project)
|
39
53
|
@projects << bundle
|
40
54
|
elsif !(@bundles.include? bundle)
|
41
55
|
@bundles << bundle
|
42
|
-
@bundles |= bundle.fragments
|
43
|
-
(bundle.bundles + bundle.imports).each {|
|
44
|
-
_collect
|
56
|
+
@bundles |= bundle.fragments
|
57
|
+
(bundle.bundles + bundle.imports).each {|import|
|
58
|
+
_collect import
|
45
59
|
}
|
46
60
|
end
|
47
61
|
end
|
48
62
|
elsif bundle.is_a?(BundlePackage)
|
49
|
-
bundle
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
63
|
+
unless ::OSGi::RESOLVED[bundle]
|
64
|
+
resolved = bundle.resolve
|
65
|
+
trace "Resolving #{bundle}: #{resolved}"
|
66
|
+
::OSGi::RESOLVED[bundle] = (resolved.nil? || (resolved.is_a?(Array) && resolved.empty?)) ? ::OSGi::MISSING : resolved
|
67
|
+
end
|
68
|
+
bundle = ::OSGi::RESOLVED[bundle]
|
69
|
+
unless bundle.nil? || bundle == ::OSGi::MISSING
|
70
|
+
bundle.each {|b|
|
71
|
+
if b.is_a?(Buildr::Project)
|
72
|
+
@projects << b
|
73
|
+
elsif !(@bundles.include? b)
|
74
|
+
@bundles << b
|
75
|
+
@bundles |= b.fragments
|
76
|
+
(b.bundles + b.imports).each {|import|
|
77
|
+
_collect import
|
78
|
+
}
|
79
|
+
end
|
80
|
+
}
|
81
|
+
end
|
59
82
|
elsif bundle.is_a?(Buildr::Project)
|
60
83
|
@projects << bundle
|
61
84
|
end
|
@@ -85,8 +108,12 @@ module OSGi
|
|
85
108
|
|
86
109
|
dependencies = ::OSGi::Dependencies.new(project)
|
87
110
|
dependencies.write(_projects.keys) {|hash, p|
|
88
|
-
|
89
|
-
|
111
|
+
unless _dependencies[p].nil?
|
112
|
+
hash[p]["dependencies"] = _dependencies[p]
|
113
|
+
end
|
114
|
+
unless _projects[p].nil?
|
115
|
+
hash[p]["projects"] = _projects[p]
|
116
|
+
end
|
90
117
|
}
|
91
118
|
end
|
92
119
|
end
|
@@ -204,7 +231,19 @@ module OSGi
|
|
204
231
|
# returns an array of the dependencies of the plugin, read from the manifest.
|
205
232
|
def manifest_dependencies()
|
206
233
|
as_bundle = Bundle.fromProject(self)
|
207
|
-
as_bundle.nil? ? [] : as_bundle.bundles.collect{|b| b.resolve
|
234
|
+
as_bundle.nil? ? [] : as_bundle.bundles.collect{|b| b.resolve}.compact + as_bundle.imports.collect {|i| i.resolve}.flatten
|
235
|
+
end
|
236
|
+
|
237
|
+
# Returns the EE defined in the manifest if present.
|
238
|
+
def execution_environments()
|
239
|
+
# Code copied straight from Bundle.fromProject
|
240
|
+
packaging = project.packages.select {|package| package.is_a?(BundlePackaging)}
|
241
|
+
raise "More than one bundle packaging is defined over the project #{project.id}, see BOSGI-16." if packaging.size > 1
|
242
|
+
return nil if packaging.empty?
|
243
|
+
m = ::Buildr::Packaging::Java::Manifest.new(File.exists?("META-INF/MANIFEST.MF") ? File.read("META-INF/MANIFEST.MF") : nil)
|
244
|
+
m.main.merge!(manifest)
|
245
|
+
m.main.merge!(packaging.first.manifest)
|
246
|
+
(Manifest.read(m.to_s).first["Bundle-RequiredExecutionEnvironment"] || {}).keys.compact.flatten.collect {|ee| OSGi.options.available_ee[ee]}
|
208
247
|
end
|
209
248
|
|
210
249
|
end
|