felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sam lee <skyn...@gmail.com>
Subject Re: Felix maven-bundle-plugin transitive dependency issue
Date Fri, 10 Jun 2011 21:08:20 GMT
freemarker and gwt are just examples..


Let's say I have a maven module that depends on:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>


To make the dependency work in the osgi bundle, I had to:
                        <Import-Package>
                            *;resolution:=optional
                        </Import-Package>
                        <Embed-Dependency>
                            mysql-connector-java;scope=compile|runtime
                        </Embed-Dependency>


I tried various combinations of maven-bundle-plugin.. but I only found the
above working.


My intuition is:

1. List <dependency>s that are not provided (<scope> isn't provided).
2. List them under Embed-Dependency.
3. Import-Package *;resolution:=optional
4. If things don't work, add <Embed-Transitive>true</Embed-Transitive>


Or, like you mentioned, you can decipher
http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
and look at the source code for maven-bundle-plugin.

It's pretty simple. It's Java. (sarcasm).



On Fri, Jun 10, 2011 at 3:47 PM, Shamik Bandopadhyay <shamikb@gmail.com>wrote:

> Sam, I just tried and it worked great. Just for my understanding, can
> you please explain how do decide to include freemarker and gwt and not
> the remaining package reference?
>
> On Fri, Jun 10, 2011 at 12:25 PM, sam lee <skynare@gmail.com> wrote:
> > Try it and see. Does it work?
> >
> > I wouldn't try to reason Java complexity, OSGi.
> >
> > On Fri, Jun 10, 2011 at 3:20 PM, <mvangeertruy@comcast.net> wrote:
> >
> >>
> >>
> >> Shamik,
> >>
> >>
> >>
> >> I completely understand how you feel about making bundles out of
> >> non-bundled .jar files. The standard answer is to contact the vendor and
> >> have them make bundles for you. However, this can take a while to
> accomplish
> >> and sometimes, especially for open-source .jar's, it may be difficult to
> >> get in touch with the folks who made the original .jar file.  In
> addition to
> >> that method, there are a couple of quick and easy ways to make a osgi
> bundle
> >> out of a non-osgi .jar file.
> >>
> >>
> >>
> >> First, you may want to consider using Karaf.  This product can ride of
> top
> >> of felix (or equinox), and it has a number of helper functions that will
> >> make your job easier.
> >>
> >>
> >>
> >> Second, when you install a non-bundled .jar file into Felix, try using
> the
> >> following syntax:
> >>
> >> osgi:install wrap:mvn:<artifactId>/<groupId>/version
> >>
> >>
> >>
> >> I haven't tried this in Felix, but in Karaf over the top of Felix, this
> >> will automagically wrap your non-osgi bundle.  "Wrapping" in the process
> of
> >> using a tool to add osgi-stuff into a non-osgi .jar file's MANIFEST.MF
> >> file.  While this may not be the best approach for an operational
> >> environment, this will definately help you get your test stuff working.
> >>
> >>
> >>
> >> To make a more operational-ready bundle, you can use the bnd tool to
> wrap
> >> your existing bundle.  Bnd is a very powerful tool and is pretty well
> >> documented. Google it for more information.
> >>
> >>
> >>
> >> Please let me know if this helps!
> >>
> >>
> >> ----- Original Message -----
> >> From: "Shamik Bandopadhyay" <shamikb@gmail.com>
> >> To: users@felix.apache.org
> >> Sent: Friday, June 10, 2011 2:52:09 PM
> >> Subject: Re: Felix maven-bundle-plugin transitive dependency issue
> >>
> >> Hi,
> >>
> >>   Thanks for your reply. Being a newbie, I'm finding a li'l hard to
> >> grasp the concept maybe. I agree, that embedding transitive dependency
> >> might not be the greatest idea since it contradicts OSGI fundamental.
> >> But at the sametime what bothers me is how do we address the non-osgi
> >> jars ? I can "n" number of jars in my project which maybe have other
> >> transitive dependencies. I don't see how efficient is the process of
> >> manually identifing them and make them OSGi enabled. I found the
> >> transitive dependency support comes handy in these cases.
> >>
> >> Unfortunately, I'm still not able to figure out how the
> >> <Embed-Transitive> property works for the maven-plugin-bundle.
> >> After,trying all possible combinations(so far), I haven't seen a
> >> single instance where a transitive jar got embedded in the bundle.
> >>
> >> I perhaps, need to do more reading to understand this.
> >>
> >> Can you pls share any pointers for best practises in this regard?
> >>
> >> Appreciate your help...
> >>
> >> -Thanks
> >>
> >> On Fri, Jun 10, 2011 at 11:41 AM,  <mvangeertruy@comcast.net> wrote:
> >> >
> >> >
> >> > Shamik,
> >> >
> >> >
> >> >
> >> > Embedding the transitive dependencies is one of those things that you
> can
> >> do in OSGi, but usually you shouldn't. The problem is that your bundle
> is
> >> likely not going to use most of the transitive dependencies.  So,
> embedding
> >> them into your bundle can leave you with a much larger bundle than you
> >> really need with a bunch of "stuff" you don't need.  Another problem
> that
> >> you'll see when embedding transitive dependencies is that you may run
> into a
> >> circumstance where a transitive dependency (especially for older stuff)
> >> isn't available any more.  In this case, your build will break.
> >> >
> >> >
> >> >
> >> > A better approach is to identify those bundles that you are actually
> >> going to use (which you've already done), and deploy those into OSGi
> before
> >> you deploy your taxonomy dao bundle.  A rule of thumb that I use is, if
> a
> >> bundle is listed in the dependencies section of the pom, that bundle
> should
> >> be available within OSGi.
> >> >
> >> >
> >> >
> >> > So, in short, try not embedding any dependencies in your bundle;
> instead,
> >> deploying all of the necessary bundles into OSGi first. If that doesn't
> >> work, only then should you try to embed.
> >> >
> >> >
> >> >
> >> > Please let me know if that helps!
> >> >
> >> >
> >> > ----- Original Message -----
> >> > From: "Shamik Bandopadhyay" <shamikb@gmail.com>
> >> > To: users@felix.apache.org
> >> > Sent: Friday, June 10, 2011 1:56:54 PM
> >> > Subject: Felix maven-bundle-plugin transitive dependency issue
> >> >
> >> > Hi,
> >> >
> >> > I'm new to OSGI and trying to deploy my first application. I've a
> >> > spring dependency in my pom. While deploying I realized that Felix
> >> > runtime requires all transitive dependencies to install the bundle
> >> > properly. Since then, I'm sort of struggling to resolve this issue.
> >> > I've tried embedded-dependency and embedded-transitive options, but of
> >> > no luck. Here's my pom.
> >> >
> >> >
> >> > <project xmlns="http://maven.apache.org/POM/4.0.0"
> >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> >> > http://maven.apache.org/xsd/maven-4.0.0.xsd">
> >> >     <modelVersion>4.0.0</modelVersion>
> >> >     <groupId>com.test</groupId>
> >> >     <artifactId>taxonomydaobundle</artifactId>
> >> >     <version>1.0.0</version>
> >> >     <packaging>bundle</packaging>
> >> >     <name>Taxonomy Dao Bundle</name>
> >> >     <url>http://maven.apache.org</url>
> >> >     <repositories>
> >> >         <repository>
> >> >             <id>fusesource</id>
> >> >             <url>http://repo.fusesource.com/maven2</url>
> >> >             <snapshots>
> >> >                 <enabled>false</enabled>
> >> >             </snapshots>
> >> >             <releases>
> >> >                 <enabled>true</enabled>
> >> >             </releases>
> >> >         </repository>
> >> >         <repository>
> >> >             <id>apache-public</id>
> >> >             <url>https://repository.apache.org/content/groups/public/
> >> </url>
> >> >             <snapshots>
> >> >                 <enabled>true</enabled>
> >> >             </snapshots>
> >> >             <releases>
> >> >                 <enabled>true</enabled>
> >> >             </releases>
> >> >         </repository>
> >> >     </repositories>
> >> >
> >> >     <properties>
> >> >
> >>  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> >> >     </properties>
> >> >
> >> >     <dependencies>
> >> >         <dependency>
> >> >             <groupId>com.test</groupId>
> >> >             <artifactId>taxonomymodelbundle</artifactId>
> >> >             <version>1.0.0</version>
> >> >             <scope>compile</scope>
> >> >         </dependency>
> >> >         <dependency>
> >> >             <groupId>org.springframework</groupId>
> >> >             <artifactId>spring</artifactId>
> >> >             <version>2.5.5</version>
> >> >         </dependency>
> >> >         <dependency>
> >> >             <groupId>junit</groupId>
> >> >             <artifactId>junit</artifactId>
> >> >             <version>3.8.1</version>
> >> >             <scope>test</scope>
> >> >         </dependency>
> >> >     </dependencies>
> >> >
> >> >     <build>
> >> >         <plugins>
> >> >             <plugin>
> >> >                 <groupId>org.apache.felix</groupId>
> >> >                 <artifactId>maven-bundle-plugin</artifactId>
> >> >                 <version>2.0.1</version>
> >> >                 <extensions>true</extensions>
> >> >                 <configuration>
> >> >                     <instructions>
> >> >
> >>  <Export-Package>com.test.taxonomy.api.*;version=1.0.0
> >> >                         </Export-Package>
> >> >
> >> > <Import-Package>com.test.taxonomy.message.*;version=1.0.0,
> >> >                             *
> >> >                         </Import-Package>
> >> >
> >> > <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
> >> >                         <Embed-Transitive>true</Embed-Transitive>
> >> >                     </instructions>
> >> >                 </configuration>
> >> >             </plugin>
> >> >             <plugin>
> >> >                 <groupId>org.apache.maven.plugins</groupId>
> >> >                 <artifactId>maven-compiler-plugin</artifactId>
> >> >                 <version>2.1</version>
> >> >                 <configuration>
> >> >                     <source>1.6</source>
> >> >                     <target>1.6</target>
> >> >                 </configuration>
> >> >             </plugin>
> >> >         </plugins>
> >> >     </build>
> >> > </project>
> >> >
> >> >  mvn install only embeds the direct dependency jars in the bundle.
> >> > When I try to install the bundle in Felix, its throwing import errors
> >> > as it's failing to resolve the dependencies. Here's a snippet :
> >> >
> >> > Imported Packages        ERROR: bsh -- Cannot be resolved
> >> > ERROR: com.caucho.burlap.client -- Cannot be resolved
> >> > ERROR: com.caucho.burlap.io -- Cannot be resolved
> >> > ERROR: com.caucho.burlap.server -- Cannot be resolved
> >> > ERROR: com.caucho.hessian.client -- Cannot be resolved
> >> > ERROR: com.caucho.hessian.io -- Cannot be resolved
> >> > ERROR: com.caucho.hessian.server -- Cannot be resolved
> >> > ERROR: com.ibatis.common.util -- Cannot be resolved
> >> > ERROR: com.ibatis.common.xml -- Cannot be resolved
> >> > ERROR: com.ibatis.sqlmap.client -- Cannot be resolved
> >> > ERROR: com.ibatis.sqlmap.client.event -- Cannot be resolved
> >> > ERROR: com.ibatis.sqlmap.engine.builder.xml -- Cannot be resolved
> >> > ERROR: com.ibatis.sqlmap.engine.impl -- Cannot be resolved
> >> > ERROR: com.ibatis.sqlmap.engine.transaction -- Cannot be resolved
> >> > ERROR: com.ibatis.sqlmap.engine.transaction.external -- Cannot be
> >> resolved
> >> > ERROR: com.ibatis.sqlmap.engine.type -- Cannot be resolved
> >> > ERROR: com.ibm.wsspi.uow -- Cannot be resolved
> >> > ERROR: com.jamonapi -- Cannot be resolved
> >> > ERROR: com.mchange.v2.c3p0 -- Cannot be resolved
> >> > ERROR: com.sun.enterprise.loader -- Cannot be resolved and overwritten
> >> > by Boot Delegation
> >> > ERROR: com.sun.net.httpserver -- Cannot be resolved and overwritten by
> >> > Boot Delegation
> >> > ERROR: com.sun.rowset -- Cannot be resolved and overwritten by Boot
> >> Delegation
> >> > ERROR: commonj.timers -- Cannot be resolved
> >> > ERROR: commonj.work -- Cannot be resolved
> >> > ERROR: edu.emory.mathcs.backport.java.util.concurrent -- Cannot be
> >> resolved
> >> > ERROR: freemarker.cache -- Cannot be resolved
> >> > ERROR: freemarker.template -- Cannot be resolved
> >> >
> >> > My understanding was using <Embed-Transitive>true</Embed-Transitive>
> >> > will embed all transitive dependency jars in the bundle,but apparently
> >> > that's not been the case so far.
> >> >
> >> > I'll appreciate if someone can tell what's the right approach to
> >> > resolve this issue.
> >> >
> >> > -Thanks
> >> >
> >> > ---------------------------------------------------------------------
> >> > To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> >> > For additional commands, e-mail: users-help@felix.apache.org
> >> >
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> >> For additional commands, e-mail: users-help@felix.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message