On 16 November 2010 11:07, Guillaume Nodet <gno...@gmail.com> wrote:

> I'll reiterate the goal I had in mind here.
>
> The goal is to make an existing non-osgi project produce the best
> possible osgi bundles instead of jars without any change in the
> packaging or the versioning of the jars themselves (as those will
> still be used in non-osgi environement).   I'm just in the process of
> doing that once again for another project (abdera).  So anything that
> require changing the code is ruled out at this point, so things like
> cleanly separating  the api from the implementation is not a
> possibility here.
>
> The goal is to make the project being able to be consumed in OSGi.
> Additional refactoring could be done after that to start following
> best practices, but that's not my point.   So that's really my goal:
> do not touch a single line of code and make things easy for people to
> use, this means the maven bundle plugin should mostly figure out
> everything using defaults.
>
> Actually, I think the {local} thing should be sufficient as I could
> specifiy the defaults I want in the root pom and have it inherited,
>

yes, once the local set of packages is available in a property then you
could always use:


 <Export-Package>{local-packages};version="${project.version}"</Export-Package>

although the code to expand {local-packages} in the plugin would need to be
intelligent
enough to add all the attached attributes to each clause in the expanded
package list

PS. using {local-packages} is imho a more descriptive name than just {local}

-- 
Cheers, Stuart


> but then, those defaults could be available using a single maven
> bundle switch to help people.  That would mean turning plain jars into
> (not completely screwed) osgi bundles would require mostly no osgi
> knowledge and only adding a snippet of code in the root pom and change
> the packaging to bundle (even maybe that's not required).
>
> That's really my goal, help non-osgi aware projects produce osgi
> bundles to avoid having to repackage all the jars as we do in
> servicemix or as spring-source does.
>
> That said, comments below...
>
> On Tue, Nov 16, 2010 at 11:41, Marcel Offermans
> <marcel.offerm...@luminis.nl> wrote:
> > Hello Guillaume,
> >
> > On 16 Nov 2010, at 10:47 , Guillaume Nodet wrote:
> >> On Tue, Nov 16, 2010 at 10:22, Richard S. Hall <he...@ungoverned.org>
> wrote:
> >>> On 11/16/10 4:07, Guillaume Nodet wrote:
> >>>>
> >>>> I'd like to improve the maven bundle plugin to make it very easy to
> >>>> actually create good bundles for people that have had limited exposure
> >>>> to OSGi.
> >>>> I think in such cases, we should have something like the following:
> >>>>    * export all the packages from the src/main/java (this is done by
> >>>> default by the plugin if nothing is specified, but there's no way to
> >>>> add things without having to list all the packages again)
> >>>
> >>> Not sure what you are proposing here, since it already is the default
> as you
> >>> mention. Are you proposing some sort of macro to specify "export all" ?
> >
> > Actually I think it is a really horrible default to export all packages
> in a bundle, as it does not promote modularity at all: if all your bundles
> simply export all their packages, then what did you gain by using OSGi at
> all? Very little.
>
> As I said, you gain the ability to use that project in an osgi
> environment, that's already a lot.
>
> >
> >>>>    * use the pom version for the version of the exported packages
> >>>
> >>> I don't think this is a good idea. You might as well just set them all
> to
> >>> 0.0.0, since it is about as meaningful. The bundle-version attribute is
> >>> already added implicitly, so if someone wants to use the bundle version
> they
> >>> already can.
> >>
> >> I disagree.  A version that never chagnes is not really a version.  At
> >> least, if you put the bundle version, you can use version ranges and
> >> make sure you have some idea about what you're importing.  Most of the
> >> projects i've seen, or all the re-packaged jars, use the bundle
> >> version as the package version, so, even if it's not the best way of
> >> doing versioning, that's something that people use and which is much
> >> better than nothing at all.   I think we should support them if they
> >> want to use that.
> >
> > So this is really about how to do versioning packages, and basically
> there are three ways to do it:
> >
> > 1) never bump the version automatically, so you'll stay at 0.0.0
> > 2) always bump the version, regardless of any real changes
> > 3) properly version, only bumping the appropriate part of the version
> when a change is made
> >
> > I would strongly advise against both 1 and 2, as neither makes much sense
> to me. Option 1 is obvious, if you do not version your packages and start
> doing updates of bundles, any non-compatible change in any package will
> probably break your deployment. Option 2 just means that you are very close
> to doing monolithic deployments, because if a bundle A gets a new version,
> and other bundles depend on a package of A, they all need a new version as
> well. This effect will pretty soon ripple through the whole system. That
> leaves option 3, which is more work but the only way to go if you really
> care about modularity and updating only parts of your application at
> runtime.
>
> The thing is the bundle-version is hardly used at all.  And yeah,
> option 2 is close to monolithic deployment, when that's not really a
> problem.  A workaround is what i tried to explain earlier: use a
> stricter version range for the import package within such a
> deployment. That allows deploying bug fix bundles.
> Again, it's not best practices, but that's something that non osgi
> people can deal with easily.
>
> >
> >> Actually, I think sling is the only project i've seen where the
> >> package version is not the bundle version, not to say, that everyone's
> >> right, but that's the way people use it now, and in all the projects
> >> i've seen, people are not osgi experts and they do not necessarily
> >> want to spend much time on it, so having to specify a different
> >> version for each package is not something they'll do.
> >
> > I think we might work in different types of projects. All projects I have
> done did explicitly choose OSGi because of its benefits, and they make an
> effort to properly use it. Of course all of this does not come for free, but
> I am wondering if the projects you're involved in really care about the
> benefits that OSGi brings. If not, why is it being used at all?
> >
> > Yes, properly versioning packages and bundles is not the easiest thing in
> the world, but it's a crucial part of designing modular applications.
> Tooling can help (both Eclipse and BndTools already support bytecode
> analysis tools that help you decide what has changed and what consequences
> those changes have for your package and bundle versions) but in the end,
> both exporting and versioning are things you design and that have semantics
> and will therefore always need some human involvement.
>
> That's exactly my point.  Most of the projects i've been involved in
> are not OSGi centric, meaning the team there don't know much about
> OSGi.  They need something that's easy to use and maintain (meaning
> mostly no maintenance).  So it's just here about enabling downstream
> users to use the project in osgi.
> Over time, osgi things can kick in and refactoring can be done in
> major versions, but that's a slow process.
>
> >
> >>>> I'm not sure how to do that yet, maybe having a simple option that
> >>>> activate different profiles if people think this should not be the
> >>>> overall defaults.  I haven't given much thoughts about the technical
> >>>> aspect yet, but I do think we should make it easier to package OSGi
> >>>> bundles.
> >>>
> >>> I agree that we should generate better bundles by default. The new bnd
> helps
> >>> in some cases. I think the most controversial aspect is the default
> package
> >>> version, which I'd argue against.
> >>
> >> Then, we should let the user decide and have an easy option to turn
> >> that the way the user want.   I'm talking here about making users life
> >> easier, not enforcing best practices.
> >
> > Maybe that's what this whole discussion is about: do we promote best
> practices?
> >
> > You are advocating not to promote them, but instead make versioning as
> easy as possible. The downside is that you end up with a set of bundles that
> is tightly coupled and not particularly well designed. Of course the
> requirements of particular projects will dictate if this is a problem or
> not, but since Felix is an OSGi implementation we should definitely promote
> best practices.
> >
> > If users want to use different settings for their projects, I'm sure it's
> not hard to do, as defaults can always be overridden with other defaults. To
> deviate from best practices then becomes a conscious choice, which sounds a
> lot better than the other way round.
>
> Again, it would be easy to document that those are not best practices,
> but a simple way to have usable osgi bundles.  That's why I proposed
> having maybe some kind of profile in the maven bundle plugin to have a
> different set of defaults that could suit that needs.
>
> >> The problems comes from the fact that the bundle plugin has no simple
> >> way to specify defaults.
> >
> > That is a valid point, one should be able to override the built-in
> defaults.
> >
> > Greetings, Marcel
> >
> >
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
>

Reply via email to