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" <[email protected]> 
To: [email protected] 
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: [email protected] 
For additional commands, e-mail: [email protected] 

Reply via email to