On 21/12/2007, Stuart McCulloch <[EMAIL PROTECTED]> wrote:
>
> On 21/12/2007, GERODOLLE Anne RD-MAPS-GRE <
> [EMAIL PROTECTED]> wrote:
> >
> > Hi everybody,
> >
> > I have noticed that when using Embed-Dependency, if it occurs that one
> > of the packages in the embedded library is either exported or declared as
> > private, classes of this package are also put in the jar, so that they are
> > present twice in the bundle classpath (once in the embedded jar, and once
> > directly in the bundle)..
> >
>
> this is primarily because the BND tool is generic, and doesn't know about
> Maven dependencies...
>
> therefore to support embedding of dependencies the bundleplugin translates
> the Embed-Dependency
> instruction and the list of dependencies provided by Maven into
> Include-Resource and Bundle-ClassPath
> equivalents
>
> now, because BND uses Include-Resource, Export-Package and Private-Package
> to decide the contents
> of the bundle, if you ask it to embed a jar and then ask it to pull some
> classes into the bundle you may
> of course find some duplication if the same classes are also in the
> embedded jar
>
> Is that possible to avoid this, if so how ?
> >
>
> yes - but rather than adding complex code to detect such duplication
> (which would get very messy)
> the solution involves using a different BND instruction (called
> -exportcontents) which lets you set the
> exported packages without affecting the bundle contents
>
just realized this option is missing from the online bundleplugin docs -
will add it later today :)
for example, to wrap Log4J you'd embed the dependency and use exportcontents
> to expose the API:
>
> <configuration>
> <instructions>
> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
> <_exportcontents>org.apache.log4j</_exportcontents>
> <Import-Package>
> !javax.mail,
> !javax.management,
> !javax.jms,
> !javax.*,
> !com.sun.jdmk.comm,
> *
> </Import-Package>
> <Embed-Dependency>*</Embed-Dependency>
> </instructions>
> </configuration>
>
> there's no need to set Private-Package because the jar is already embedded
> - btw, you
> can use <Embed-Dependency>*;inline=true</Embed-Dependency> to inline the
> jar
>
> Note that in XML we use <_exportcontents> due to rules on valid tag names,
> in a BND
> properties file we would use -exportcontents ( see
> http://aqute.biz/Code/Bnd#directives
> )
>
> couple of follow-up points:
>
> 1) if you want a good logging service for OSGi, try Pax-Logging which is
> on it's second RC:
>
>
> http://wiki.ops4j.org/confluence/display/ops4j/2007/12/19/Pax-Logging+1.0+RC2
>
> it provides the Log4J API and many others and logging can be configured
> through OSGi
>
> 2) you can quickly create wrapper poms for third party libraries using
> pax-wrap-jar:
>
> http://www.ops4j.org/projects/pax/construct/help/wrap-jar.html
>
> which is part of the Pax-Construct tools (also provides bundle + bean
> archetypes)
>
> HTH
>
> As an illustration, I'm including a pom.xml that builds a bundle embedding
> > log4j (this is derivated from the felix log4j bundle).
> >
> > Thanks in advance,
> >
> > Anne
> >
> > * *
> >
> > * *
> >
> > *Anne Gérodolle
> > FT/RD/MAPS/AMS/SUME*
> >
> > *architecture de systèmes répartis*
> >
> > *distributed system architecture
> > +33 4 76 76 41 78
> > [EMAIL PROTECTED]
> >
> > * *
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> Cheers, Stuart
>
--
Cheers, Stuart