On Jan 11, 2008 9:50 AM, Stuart McCulloch <[EMAIL PROTECTED]> wrote:
>
> On 11/01/2008, Niall Pemberton <[EMAIL PROTECTED]> wrote:
> >
> > On Jan 10, 2008 5:51 PM, Stuart McCulloch <[EMAIL PROTECTED]>
> > wrote:
> > >
> > > On 10/01/2008, Niall Pemberton <[EMAIL PROTECTED]> wrote:
> > > >
> > > > On Jan 10, 2008 2:56 AM, Stuart McCulloch <[EMAIL PROTECTED]
> > >
> > > > wrote:
> > > > > On 10/01/2008, Niall Pemberton <[EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > On Jan 9, 2008 5:35 PM, Stuart McCulloch <
> > [EMAIL PROTECTED]>
> > > > > > wrote:
> > > > > > > On 09/01/2008, Niall Pemberton <[EMAIL PROTECTED]>
> > wrote:
> > > > > > >
> > > > > > > > On Jan 9, 2008 6:11 AM, Stuart McCulloch <
> > > > [EMAIL PROTECTED]>
> > > > > > > wrote:
> > > > > > > > > Hi Carsten / Niall,
> > > > > > > > >
> > > > > > > > > I've mocked up a quick patch and attached it to
> > > > > > > > > http://issues.apache.org/jira/browse/FELIX-449
> > > > > > > > > could you give it a spin and see if it resolves the problem?
> > > > (see
> > > > > > below
> > > > > > > for
> > > > > > > > > the new config option)
> > > > > > > >
> > > > > > > > Hey, thanks for the quick response - I'll give it a spin and
> > put
> > > > > > > > feedback on the Jira ticket FELIX-449
> > > > > > >
> > > > > > > thanks, I've made some improvements based on your feedback - can
> > you
> > > > > > build
> > > > > > > the plugin from svn and try it out?
> > > > > >
> > > > > > Looks good from the "non-OSGi" manifest entries PoV (using
> > > > > > excludeDependencies=false) - its picked up a couple of entries
> > from
> > > > > > BeanUtils (e.g. Extension-Name)
> > > > >
> > > > >
> > > > > if you use Carsten's original suggestion of a global wildcard
> > export:
> > > > >
> > > > >    <Export-Package>*;version="${pom.version}"</Export-Package>
> > > > >
> > > > > then you must set excludeDependencies to _true_ otherwise you will
> > pull
> > > > > in all sorts of other packages and classes from your dependencies -
> > and
> > > > > your final jarfile will be much larger than the pre-bundle one.
> > > > >
> > > > > - but I could sort those out now by
> > > > > > specifying them explicitly.
> > > > >
> > > > >
> > > > > FYI, you can always use the:
> > > > >
> > > > >    <_removeheaders>comma,separated,list,of,headers</_removeheaders>
> > > > >
> > > > > instruction to remove unwanted headers - but setting Export-Package
> > to
> > > > > an explicit package list (or excludeDependencies to true) means that
> > you
> > > > > shouldn't get the beanutils stuff to begin with...
> > > > >
> > > > > The one thing that strikes me though are
> > > > > > the version numbers are all the same - I don't really know how
> > OSGi
> > > > > > works, but for example (if I use excludeDependencies=false) I
> > would
> > > > > > have expected to see the dependencies version numbers somewhere in
> > the
> > > > > > export/import statements - for example Validator 1.4-SNAPSHOTdepends
> > > > > > on BeanUtils 1.7 - but all the version numbers spcify
> > 1.4.0.SNAPSHOT -
> > > > > > is this correct?
> > > > >
> > > > >
> > > > > all _exported_ packages will be marked with the same version,
> > because
> > > > > you've told Bnd to do this in the above Export-Package instruction
> > (and
> > > > > where the same package is also imported, the import will then use
> > the
> > > > > same version).
> > > >
> > > > Using "excludeDependencies=false" that makes sense - but for
> > > > "excludeDependencies=true" I would have thought the import statements
> > > > for dependencies would be specified - which they currently don't seem
> > > > to be.
> > >
> > >
> > > Bnd does not see the excludeDependencies option - all this option does
> > is
> > > change how much of the Maven classpath the bundleplugin passes to Bnd.
> > > The excludeDependencies option is only there to ease the migration to
> > the
> > > bundleplugin, so you can start with <Export-Package>*</Export-Package>
> > >
> > > If you want the full benefits of the bundleplugin you need to understand
> > how
> > > Bnd works - it doesn't zip the contents of target/classes, it pulls
> > classes
> > > and
> > > resources from the classpath into a bundle.
> > >
> > > Setting <Export-Package>*</Export-Package> says to Bnd: put the whole
> > > classpath into the bundle, which would normally include dependencies
> > such
> > > as the beanutils. With excludeDependencies set to true we only give Bnd
> > the
> > > local classpath, so you get the bundle you'd expect (ie. just
> > > target/classes).
> > >
> > > However because Bnd works primarily from the classpath, cutting it down
> > to
> > > the local project means it has no version information about
> > dependencies,
> > > although you are free to add this detail yourself using <Import-Package>
> > >
> > > To get the true power of Bnd you need to tell it exactly which packages
> > you
> > > want to export and which to keep private - you can then pass the
> > complete
> > > classpath to Bnd and it will add versioned imports where possible.
> >
> > Clearly I have little knowledge in this area, but with maven's
> > knowledge of dependencies and Bnds capabilities of examining jars it
> > would seem a good enhancement for the bundle plugin to be able to
> > generate version numbers for the import statement. Perhaps it would
> > mean call bnd for each dependency jar, specifying the version
> > discovered from maven and merging all the results it generates to come
> > up with a complete import statement - and that may be OTT.
>
>
> very OTT given that you can already do this :) you just need to be explicit
> and list
> what packages you want to export and which to keep private - then you can
> pass
> the whole classpath to Bnd (ie. don't set excludeDependencies) and you will
> get
> versioned imports where appropriate.
>
> also, a lot of the time you don't actually want to depend on a fixed version
> but on
> a range (ie. to include minor changes with no API breakage) so you'd
> probably end
> up setting your own versions anyway....
>
> either way I'd recommend reading Peter's page on Bnd (
> http://aqute.biz/Code/Bnd)

You're right and I will try to at some point. At this moment I don't
use OSGi - just trying to help out getting commons components
OSGi-enabled. Thanks for all your patience and explanations.

Niall

> Niall
> >
> > > > also note when you set excludeDependencies to true you are not giving
> > > > > Bnd any information about dependencies, so it can't detect the
> > versions.
> > > >
> > > > OK but can't the maven plugin pass the dependency versions to Bnd?
> > >
> > >
> > > Yes - and the way the plugin does this is by passing the complete
> > classpath.
> > > But then you're back to having to tell Bnd exactly what you want to
> > export
> > > and what you want to keep private...
> > >
> > >
> > > Niall
> > > >
> > > > > so to sum up, for basic OSGi manifest entries with minimum of fuss
> > use:
> > > > >
> > > > >    <configuration>
> > > > >       <excludeDependencies>true</excludeDependencies>
> > > > >       <instructions>
> > > > >          <Export-Package>*;version=${pom.version}</Export-Package>
> > > > >       </instructions>
> > > > >    </configuration>
> > > > >
> > > > > but if you want better OSGi manifest entries consider something
> > like:
> > > > >
> > > > >    <configuration>
> > > > >       <instructions>
> > > > >          <Export-Package>
> > > > >             some.public.pkg;version=${pom.version},
> > > > >             wildcard.public.pkg.*;version=${pom.version}
> > > > >          </Export-Package>
> > > > >          <Private-Package>
> > > > >             some.internal.pkg,
> > > > >             wildcard.internal.pkg.*
> > > > >          </Private-Package>
> > > > >       </instructions>
> > > > >    </configuration>
> > > > >
> > > > > note you have to be a bit more careful here, because any packages
> > > > > that aren't covered by Export-Package or Private-Package will _not_
> > > > > be pulled into the final bundle.
> > > > >
> > > > > the bundleplugin and Bnd are documented at:
> > > > >
> > > > >    http://felix.apache.org/site/maven-bundle-plugin-bnd.html
> > > > >    http://aqute.biz/Code/Bnd  (has full list of Bnd instructions)
> > > > >
> > > > > HTH
> > > > >
> > > > >
> > > > > Niall
> > > > > >
> > > > > > > > Niall
> > > > > > > >
> > > > > > > > > --
> > > > > > > > > Cheers, Stuart
> > > > > > > > >
> > > > > > > > > ---------- Forwarded message ----------
> > > > > > > > > From: Stuart McCulloch (JIRA) <[EMAIL PROTECTED] >
> > > > > > > > > Date: 9 Jan 2008 13:59
> > > > > > > > > Subject: [jira] Updated: (FELIX-449) Add option to limit the
> > > > > > classpath
> > > > > > > > > passed to BND to just the local project (ie. target/classes)
> > > > > > > > > To: dev@felix.apache.org
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >      [
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > https://issues.apache.org/jira/browse/FELIX-449?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
> > > > > > > > > ]
> > > > > > > > >
> > > > > > > > > Stuart McCulloch updated FELIX-449:
> > > > > > > > > -----------------------------------
> > > > > > > > >
> > > > > > > > >     Attachment: FELIX_449_20080109.txt
> > > > > > > > >
> > > > > > > > > Suggested patch - when applied to trunk, you can use:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >       <plugin>
> > > > > > > > >         <groupId>org.apache.felix</groupId>
> > > > > > > > >         <artifactId>maven-bundle-plugin</artifactId>
> > > > > > > > >         <extensions>true</extensions>
> > > > > > > > >         <configuration>
> > > > > > > > >           <excludeDependencies>true</excludeDependencies>
> > > > > > > > >
> > > > > > > > >           <instructions>
> > > > > > > > >             <Export-Package>*;version=${pom.version
> > > > > > }</Export-Package>
> > > > > > > > >           </instructions>
> > > > > > > > >         </configuration>
> > > > > > > > >       </plugin>
> > > > > > > > >
> > > > > > > > >  to bundle the project classpath, excluding dependencies.
> > > > > > > > >
> > > > > > > > > PS: feel free to suggest alternative names for this option!
> > > > > > > > >
> > > > > > > > > > Add option to limit the classpath passed to BND to just
> > the
> > > > local
> > > > > > > project
> > > > > > > > > (ie. target/classes)
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > ----------------------------------------------------------------------------------------------
> > > > > > > > > >
> > > > > > > > > >                 Key: FELIX-449
> > > > > > > > > >                 URL:
> > > > > > https://issues.apache.org/jira/browse/FELIX-449
> > > > > > > > > >             Project: Felix
> > > > > > > > > >          Issue Type: Improvement
> > > > > > > > > >          Components: Maven Bundle Plugin
> > > > > > > > > >    Affects Versions: 1.0.0
> > > > > > > > > >            Reporter: Stuart McCulloch
> > > > > > > > > >            Assignee: Stuart McCulloch
> > > > > > > > > >         Attachments: FELIX_449_20080109.txt
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Email thread from Apache Commons:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > > On Dec 28, 2007 12:35 PM, Carsten Ziegeler <
> > > > [EMAIL PROTECTED]>
> > > > > > > wrote:
> > > > > > > > > > > Hi,
> > > > > > > > > > >
> > > > > > > > > > > in the meantime Stuart fixed the problem with the maven
> > > > > > > bundleplugin, so
> > > > > > > > > > > I think we can give it a test drive :)
> > > > > > > > > > >
> > > > > > > > > > > Attached is a patch for the parent pom of commons and
> > one to
> > > > > > > demonstrate
> > > > > > > > > > > how to add support for OSGi to commons-lang.
> > > > > > > > > > >
> > > > > > > > > > > The changes to the parent pom are minimal: it just adds
> > the
> > > > > > maven
> > > > > > > > > > > bundleplugin from the Apache Felix project. We currently
> > > > need to
> > > > > > use
> > > > > > > a
> > > > > > > > > > > snapshot version, but a release is comming soon.
> > > > > > > > > > > Besides adding the plugin, the patch also configures the
> > > > bundle
> > > > > > > symbolic
> > > > > > > > > > > name for all modules. The symbolic name is the unique
> > > > identifier
> > > > > > > which
> > > > > > > > > > > should follow java package naming. The best value is to
> > use
> > > > > > > something
> > > > > > > > > > > like "org.apache.commons.{artifactId}" where artifact id
> > is
> > > > > > > commons-lang
> > > > > > > > > > > or commons-collections etc.
> > > > > > > > >  > >
> > > > > > > > > > > The patch to commons lang is also very simple. It
> > changes
> > > > the
> > > > > > parent
> > > > > > > pom
> > > > > > > > > > > to the current snapshot (which includes the changes from
> > > > above)
> > > > > > and
> > > > > > > sets
> > > > > > > > > > > the packaging to bundle - this ensures that the
> > bundleplugin
> > > > > > runs
> > > > > > > and
> > > > > > > > > > > creates the resulting jar file. So the bundleplugin
> > replaces
> > > > the
> > > > > > > maven
> > > > > > > > > > > jar plugin. If you leave the packaging as "jar" the
> > > > bundleplugin
> > > > > > > will
> > > > > > > > > > > not run.
> > > > > > > > > > > The last part of the patch adds the configuration to the
> > > > > > > bundleplugin.
> > > > > > > > > > > The export "*" exports all packages definied in this
> > module
> > > > for
> > > > > > > other
> > > > > > > > > > > bundles, so all classes are public. All packages are
> > marked
> > > > with
> > > > > > the
> > > > > > > > > > > current version which allows to run different versions
> > in
> > > > > > parallel.
> > > > > > > > > > > The imports are not specified as they are calculated
> > > > > > automatically
> > > > > > > by
> > > > > > > > > > > the bundleplugin.
> > > > > > > > > > >
> > > > > > > > > > > And that's it :)
> > > > > > > > > > >
> > > > > > > > > > > The changes to the other projects should be similar.
> > > > > > > > > > I tried using the bundle plugin (I checked out and built
> > the
> > > > > > latest
> > > > > > > > > > from svn) with Commons Validator and it produced the
> > following
> > > > > > > > > > MANIFEST.MF:
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > http://people.apache.org/~niallp/commons-osgi/commons-validator-MANIFEST.MF
> > > > > > > > > > It seems to have picked up some Manifest entries from
> > > > BeanUtils  -
> > > > > > for
> > > > > > > > > example:
> > > > > > > > > > Extension-Name: org.apache.commons.beanutils
> > > > > > > > >  > Implementation-Version: 1.6
> > > > > > > > > > Specification-Title: Jakarta Commons Beanutils
> > > > > > > > > > Implementation-Title: org.apache.commons.beanutils
> > > > > > > > >
> > > > > > > > > > Niall
> > > > > > > > > > (N.B. The BeanUtils 1.7.0 jar has version incorectly
> > > > specifying
> > > > > > 1.6 in
> > > > > > > > > > its manifest.
> > > > > > > > > > > Carsten
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > --
> > > > > > > > > > > Carsten Ziegeler
> > > > > > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > >
> > > > > > > > > > > Index:
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > /Users/cziegeler/Developer/workspaces/default/commons-proper/commons-parent/pom.xml
> > > > > > > > > > >
> > > > > >
> > ===================================================================
> > > > > > > > > > > ---
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > /Users/cziegeler/Developer/workspaces/default/commons-proper/commons-parent/pom.xml
> > > > > > > > > (revision 605909)
> > > > > > > > > > > +++
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > /Users/cziegeler/Developer/workspaces/default/commons-proper/commons-parent/pom.xml
> > > > > > > > > (working copy)
> > > > > > > > > > > @@ -159,6 +159,12 @@
> > > > > > > > > > >            <artifactId>maven-release-plugin</artifactId>
> > > > > > > > > > >            <version>2.0-beta-7</version>
> > > > > > > > > > >          </plugin>
> > > > > > > > >  > > +        <plugin>
> > > > > > > > > > > +          <groupId>org.apache.felix</groupId>
> > > > > > > > > > > +          <artifactId>maven-bundle-plugin</artifactId>
> > > > > > > > > > > +          <version> 1.1.0-SNAPSHOT</version>
> > > > > > > > > > > +          <inherited>true</inherited>
> > > > > > > > > > > +        </plugin>
> > > > > > > > > > >        </plugins>
> > > > > > > > > > >      </pluginManagement>
> > > > > > > > > > >      <plugins>
> > > > > > > > > > > @@ -194,6 +200,15 @@
> > > > > > > > > > >            <jdkLevel>${maven.compile.source}</jdkLevel>
> > > > > > > > > > >          </configuration>
> > > > > > > > > > >        </plugin>
> > > > > > > > > > > +      <plugin>
> > > > > > > > > > > +        <groupId>org.apache.felix</groupId>
> > > > > > > > > > > +        <artifactId>maven-bundle-plugin</artifactId>
> > > > > > > > > > > +        <configuration>
> > > > > > > > > > > +          <instructions>
> > > > > > > > > > > +
> > > > > > > > >
> > > > > > > <Bundle-SymbolicName>org.apache.commons.${pom.artifactId}
> > > > > > </Bundle-SymbolicName>
> > > > > > > > > > > +          </instructions>
> > > > > > > > > > > +        </configuration>
> > > > > > > > > > > +      </plugin>
> > > > > > > > > > >      </plugins>
> > > > > > > > > > >    </build>
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > Index:
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > /Users/cziegeler/Developer/workspaces/default/commons-proper/lang/pom.xml
> > > > > > > > > > >
> > > > > >
> > ===================================================================
> > > > > > > > > > > ---
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > /Users/cziegeler/Developer/workspaces/default/commons-proper/lang/pom.xml
> > > > > > > > > (revision 605909)
> > > > > > > > > > > +++
> > > > > > > > >
> > > > > > >
> > > > > >
> > > >
> > /Users/cziegeler/Developer/workspaces/default/commons-proper/lang/pom.xml
> > > > > > > > > (working copy)
> > > > > > > > >  > > @@ -22,13 +22,14 @@
> > > > > > > > > > >    <parent>
> > > > > > > > > > >      <groupId>org.apache.commons</groupId>
> > > > > > > > > > >      <artifactId>commons-parent</artifactId>
> > > > > > > > > > > -    <version>5</version>
> > > > > > > > > > > +    <version>6-SNAPSHOT</version>
> > > > > > > > > > >    </parent>
> > > > > > > > > > >    <modelVersion>4.0.0</modelVersion>
> > > > > > > > > > >    <groupId>commons-lang</groupId>
> > > > > > > > > > >    <artifactId>commons-lang</artifactId>
> > > > > > > > > > >    <version>2.4-SNAPSHOT</version>
> > > > > > > > > > >    <name>Commons Lang</name>
> > > > > > > > > > > +  <packaging>bundle</packaging>
> > > > > > > > > > >
> > > > > > > > > > >    <inceptionYear>2001</inceptionYear>
> > > > > > > > > > >      <description>
> > > > > > > > > > > @@ -401,6 +402,16 @@
> > > > > > > > > > >            <tarLongFileMode>gnu</tarLongFileMode>
> > > > > > > > > > >          </configuration>
> > > > > > > > > > >        </plugin>
> > > > > > > > > > > +      <plugin>
> > > > > > > > > > > +        <groupId> org.apache.felix</groupId>
> > > > > > > > > > > +        <artifactId>maven-bundle-plugin</artifactId>
> > > > > > > > > > > +        <extensions>true</extensions>
> > > > > > > > > > > +        <configuration>
> > > > > > > > > > > +          <instructions>
> > > > > > > > > > > +
> > > > > > > <Export-Package>*;version=${pom.version}</Export-Package>
> > > > > > > > > > > +          </instructions>
> > > > > > > > > > > +        </configuration>
> > > > > > > > > > > +      </plugin>
> > > > > > > > > > >      </plugins>
> > > > > > > > > > >    </build>
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > >
> > > > ---------------------------------------------------------------------
> > > > > > > > > > > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > > > > > > > > > > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> > > > > > > > > > >
> > > > > > > > > >
> > > > > >
> > ---------------------------------------------------------------------
> > > > > > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > > > > >  > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > This message is automatically generated by JIRA.
> > > > > > > > > -
> > > > > > > > > You can reply to this email to add a comment to the issue
> > > > online.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Cheers, Stuart
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Cheers, Stuart
> > > > >
> > > >
> > >
> > > --
> > > Cheers, Stuart
> > >
> >
>
>
>
> --
> Cheers, Stuart
>

Reply via email to