You said "the exporting package doesn't have a version". But it must actually have a version because otherwise maven-bundle-plugin would not add the range on the Import-Package statement! The only thing I can think of is you are building against versioned bundles but deploying different, un-versioned bundles during runtime. Which is a bit of an odd thing to do...
Anyway if you use the same bundles/jars during both compilation and during runtime, then everything should be fine (which is pretty much what Felix said). Regards Neil On Wed, Nov 7, 2012 at 11:34 AM, Dileepa Jayakody <[email protected]> wrote: > Hi Felix, > > Thanks for your reply. > > The main problem is we haven't defined versions for Exported packages in > the producer bundles. > > eg: In org.foo.bar:1.0.2 bundle we define > Export-Package: org.foo.bar.*; > > So when building the bundle the producer bundle's Export-Package is defined > without any version. The problem is when org.foo.bar.* is used as an > Import-Package in a consumer bundle. Even though we define Import-Package: > org.foo.bar.*; (without a version defined), when the consumer bundle is > built the bundle-plugin has injected a version range like [1.0.0,2.0.0). > > The problem occurs when installing the bundles to our runtime using > Equinox, as it first resolves the bundle resolutions for Imports, Exports. > So regardless of the compile-time dependency used to build the consumer > bundle, we don't want to have a version injected to the org.foo.bar.* > Import, because the exporting package doesn't have a version. > Is there any mechanism for us to stop the bundle-plugin from injecting the > version for the Import-Package here? > In several cases where we faced this issue, we have defined the > Import-Package: org.foo.bar.*;*version="0.0.0"* so that it will get wired > to any version exported for the org.foo.bar.* > But using version="0.0.0" hack for all packages exported without a defined > version is not manageable at this moment. > > I hope the problem we are facing, is clear to you. The best solution here > would be to define versions for Exports and use them appropriately in > relevant Imports. > But at the moment there are so many bundles that are exporting packages > without a defined version. > So can you please suggest an alternate mechanism to handle Imports Exports > with no versions specified in the bundle-plugin? Is there a mechanism we > can tell the bundle-plugin not to compute version-ranges for Imports? Or is > there an older version of the bundle-plugin this functionality is not > available? > > Thanks a lot! > > Regards, > Dileepa > > > > > On Wed, Nov 7, 2012 at 2:26 PM, Felix Meschberger <[email protected] > >wrote: > > > Hi, > > > > Am 07.11.2012 um 08:54 schrieb Dileepa Jayakody: > > > > > Hi All, > > > > > > We are having a problem using maven-bundle-plugin to build our bundles, > > > where it injects a version-range (I think it computes the version range > > > from the compile-time maven-dependency) to the bundle's > Import-Packages. > > > > > > For eg : when I have specified an Import-Package: org.foo.bar; The > plugin > > > injects a version range like Import-Package: > org.foo.bar;version="[1.0.0, > > > 2.0.0)" probably by computing from the compile time dependency version > of > > > the maven artifact exposing org.foo.bar package. > > > > > > The problem is many of our producer bundles are not exporting their > > > packages with versions. So when the bundle-plugin computes and injects > a > > > version range to relevant consumer bundle's Import-Package, the > > resolution > > > get broken because there is no exporter for that package within the > > > required version-range. > > > I know, we should manage versions in Exports/Imports properly but it's > > not > > > manageable at the moment with the number of bundles has exceeded 300. > > > > So your dependencies expose exported package version and your deployed > > bundles don't ? This sounds like a strange situation. > > > > Looks like you are building against newer versions than the deployed ones > > ? If so, I suggest to build against the same versions as you have > deployed. > > > > In general my take on this is to always compile to the lowest version > > dependency that meets the (API) needs of the code you are compiling. This > > way your lower version in the range will really expose what the bundle > > needs and you will have less surprises at deployment time. > > > > The idea is that you develop with a certain version of a dependency (even > > though Maven's dependencies and OSGi's Import-Package need not be the > same) > > and that you expect at least that version of the dependency or a newer > one > > to be actually deployed. > > > > Regards > > Felix > > > > > > > > Can I please know how can I explicitly avoid the version-range injected > > to > > > Import-Package? Is this feature of computing version-range for Imports > > > added to maven-bundle-plugin (bnd) in a recent released version? > > > We are using 2.3.5 version of the bundle-plugin. > > > If this feature has been added to a recent version of the plugin , can > > you > > > please specify an older version of the bundle-plugin that doesn't > compute > > > version ranges for Import-Package? > > > At the moment our immediate requirement is to stop adding > version-ranges > > > for Import-Package > > > > > > Appreciate your insight on this. > > > > > > Thanks, > > > Dileepa > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > > -- > Dileepa Jayakody, > Software Engineer, WSO2 Inc. > Lean . Enterprise . Middleware > > Mobile : +94777-857616 >

