{local-packages} looks good to me.
I'll try to add that asap.

On Tue, Nov 16, 2010 at 12:30, Stuart McCulloch <mccu...@gmail.com> wrote:
> 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
>>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Reply via email to