Hello again, Since it is a unit test that fails it means that the code actually compiles or you would not get to the test. Thereby I conclude that the dependency not being resolved is actually not needed. I would try to make the following change to the maven-bundle-plugin config in your pom:
> <Import-Package>!com.host.kernel.logger,*</Import-Package> I've just learned something new myself by reading the BND documentatation: You can exclude packages by prefixing a package with "!" ! /Tommy 25 aug 2013 kl. 23:37 skrev Raihan Jamal <[email protected]>: > Thanks a lot Tommy for the detailed suggestion. It helps in a lot for me to > understand few things. As I am new to OSGi world so little bit confuse now.. > > Let us talk about this example now by which if I am able to solve the > problem then I would be able to solve my other problems too.. Below is my > code in which I am able to start the OSGi framework and then I am trying to > install GoldenlseyeStorageService bundle. And as soon as I try to install > the bundle, I always get the exception as I told you in my previous email . > > *Unresolved constraint in bundle GoldenlseyeStorageService [1]: Unable to > resolve 1.0: missing requirement [1.0] osgi.wiring.package; > (&(osgi.wiring.package=com.host.kernel.logger)(version>=1.19.0)(!(version>=2.0.0))) > * > * > * > Below is the code:- > * > * > public class TestOSGi { > > public static void main(String[] args) { > > try { > FileUtils.deleteDirectory(new File("felix-cache")); > FrameworkFactory frameworkFactory = > ServiceLoader.load(FrameworkFactory.class).iterator().next(); > > Framework framework = frameworkFactory.newFramework(new > HashMap<String, String>()); > framework.start(); > > final BundleContext bundleContext = framework.getBundleContext(); > final List<Bundle> installedBundles = new LinkedList<Bundle>(); > > BundleActivator b = new org.ops4j.pax.url.mvn.internal.Activator(); > b.start(bundleContext); > > String localFilename = > "file:C:\\Storage\\GoldenlseyeStorageService-1.0.0.jar"; > > installedBundles.add(bundleContext.installBundle(localFilename)); > > for (Bundle bundle : installedBundles) { > bundle.start(); // this line throws me an exception > } > > } catch (IOException e) { > e.printStackTrace(); > } catch (BundleException e) { > e.printStackTrace(); > } catch (Exception e) { > e.printStackTrace(); > } > } > } > > > Now as you mention that the error mean is - the package the bundle wants to > import is not being exported by *any other bundle (which bundle are we > talking about here?)*, and thus cannot be imported. So here what I am > supposed to do? What should I do here to fix the problem? > > Bcoz, I am installing only one bundle here which is bringing other > dependencies and I am not sure what I should do here to fix this problem. > As I am supposed to use lot of our company specific dependencies in my > pom.xml file.. > > The bundle (*GoldenlseyeStorageService *) that I am trying to install > depends on this maven dependency in its pom.xml file > > <dependency> > <groupId>com.host.soa</groupId> > <artifactId>soaMerged</artifactId> > <scope>compile</scope> > <exclusions> > <exclusion> > <artifactId>axis2</artifactId> > <groupId>org.apache</groupId> > </exclusion> > </exclusions> > </dependency> > > And the above maven dependency is bringing in kernelMerged dependency in > which this package is there- *com.host.kernel.logger. * > * > * > And I am supposed to use this package in my code.. > > Now I believe the suggestions you gave me is- > > 1) I should install kernelMerged jar as a Bundle before installing * > GoldenlseyeStorageService* , to solve this problem? Right? > > Below is my full pom.xml file for *GoldenlseyeStorageService *bundle which > is what I am trying to install.. > > > <?xml version="1.0" encoding="UTF-8"?> > <project > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > http://maven.apache.org/xsd/maven-4.0.0.xsd" > xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" > http://www.w3.org/2001/XMLSchema-instance"> > > <modelVersion>4.0.0</modelVersion> > <groupId>com.host.personalize.goldeneye</groupId> > <artifactId>GoldeneyeStorageService</artifactId> > <version>1.0.0</version> > > <packaging>bundle</packaging> > <name>GoldeneyeStorageService</name> > > <properties> > <singlePom>true</singlePom> > </properties> > <dependencies> > <dependency> > <groupId>junit</groupId> > <artifactId>junit</artifactId> > <scope>compile</scope> > </dependency> > <dependency> > <groupId>com.host.soa</groupId> > <artifactId>soaMerged</artifactId> > <scope>compile</scope> > <exclusions> > <exclusion> > <artifactId>axis2</artifactId> > <groupId>org.apache</groupId> > </exclusion> > </exclusions> > </dependency> > </dependencies> > <build> > <sourceDirectory>src</sourceDirectory> > <testSourceDirectory>test</testSourceDirectory> > <outputDirectory>build/classes</outputDirectory> > <testOutputDirectory>build/classes</testOutputDirectory> > <resources> > <resource> > <directory>gen-meta-src</directory> > </resource> > <resource> > <directory>meta-src</directory> > </resource> > <resource> > <directory>src</directory> > <excludes> > <exclude>**/*.java</exclude> > </excludes> > </resource> > <resource> > <filtering>true</filtering> > <directory>src/main/filtered-resources</directory> > </resource> > </resources> > <testResources> > <testResource> > <directory>test</directory> > <excludes> > <exclude>**/*.java</exclude> > </excludes> > </testResource> > </testResources> > <plugins> > <plugin> > <groupId>org.codehaus.mojo</groupId> > <artifactId>build-helper-maven-plugin</artifactId> > <version>1.7</version> > <executions> > <execution> > <id>add-source</id> > <phase>generate-sources</phase> > <goals> > <goal>add-source</goal> > </goals> > <configuration> > <sources> > <source>src</source> > <source>gen-src/client</source> > </sources> > </configuration> > </execution> > </executions> > </plugin> > <plugin> > <groupId>org.apache.felix</groupId> > <artifactId>maven-bundle-plugin</artifactId> > <configuration> > <manifestLocation>src/main/resources/META-INF</manifestLocation> > <instructions> > <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> > <Bundle-Name>${pom.artifactId}</Bundle-Name> > <Export-Package>{local-packages}</Export-Package> > <Import-Package>*</Import-Package> > > <Include-Resource>{maven-resources},build/classes/buildinfo.properties</Include-Resource> > <X-Raptor-Pipeline-Handler></X-Raptor-Pipeline-Handler> > </instructions> > <executions> > <execution> > <id>default-bundle</id> > <phase>compile</phase> > <goals> > <goal>bundle</goal> > </goals> > </execution> > </executions> > </configuration> > </plugin> > </plugins> > </build> > </project> > > If you can guide me step by step then it will be great for me to fix this > problem.. Thanks for your time and help. > > > > > > > *Raihan Jamal* > > > On Sun, Aug 25, 2013 at 8:36 AM, Tommy Svensson <[email protected]> wrote: > >> Hello Jamal, >> >> Both your mails seems to be the same thing. >> >> The following import: >> >> Import-Package: com.host.kernel.logger;version="[1.19,2)",... >> >> means that this package is not available in the bundle being started and >> needs to be imported from another bundle exporting this package. >> >> The following error message: >> >> Unresolved constraint in bundle GoldenlseyeStorageService [1]: >> Unable >> to resolve 1.0: missing requirement [1.0] osgi.wiring.package; >> >> (&(osgi.wiring.package=com.host.kernel.logger)(version>=1.19.0)(!(version>=2.0.0))) >> >> says the the package the bundle wants to import is not being exported by >> any other bundle, and thus cannot be imported. >> >> There are 2 ways to solve this: >> >> 1) Another bundle exporting this package needs to be deployed. >> >> 2) A jar containing this package needs to be included/embeded within the >> bundle instead of being imported from other bundle. >> >> Also note that a mismatch in version number of imported package and >> exported package will not resolve! >> >> From the pom in your other mail I see you have several dependencies. Only >> one of them have a scope specified (compile), but if I remember correctly >> no scope specification is the same as "compile". I'm also unsure what the >> defaults are for the "maven-bundle-plugin", you only specify the following >> instructions: >> >> >> <Bundle-SymbolicName>GoldeneyeModellingFramework</Bundle-SymbolicName> >> >> <Bundle-Activator>com.host.personalize.goldeneye.framework.activator.Activator</Bundle-Activator> >> >> I always specify: >> >> <Embed-Dependency>*;scope=compile</Embed-Dependency> >> >> which will embed all jars with compile scope. Those I don't want embedded >> but import instead I specify with >> >> <scope>provided</scope> >> >> Again, I don't know the default behavior if your dependencies gets sucked >> into your bundle or not. In my experience when you have dependencies on >> frameworks the framework jars can contain dependencies to things you don't >> use and don't need, but an "Import" will be generated by the >> maven-bundle-plugin. I have found no good way to handle those cases other >> than not use the maven-bundle-plugin more than once and then edit an manage >> the MANIFEST.MF manually. >> >> Also note that if your dependencies are included in your bundle, you also >> need to specify them in the "Bundle-Classpath". Example: >> >> … >> <archive> >> <manifestEntries> >> >> <Bundle-ClassPath>.,lib/GoldeneyeStorageService-1.0.0.jar,...</Bundle-ClassPath> >> </manifestEntries> >> </archive> >> … >> >> The maven-bundle-plugin (or underlaying BND) will try to import any >> referenced package not part of the bundle internal classpath. I see no >> Bundle-ClassPath specifications in your examples. >> >> In either case **you have dependencies that the server (felix) does not >> know about.**, or possible have not been deployed yet, i.e things are >> deployed in the wrong order. I have not used Felix directly, I use it >> through glassfish. Glassfish does a reasonable good resolve of startup >> order and redeploy later on failure. If that is a feature of Glassfish or >> Felix I don't know. >> >> Regards, >> Tommy Svensson >> >> >> 24 aug 2013 kl. 10:52 skrev Raihan Jamal <[email protected]>: >> >>> I have successfullly started an OSGi framework (Apache Felix). Now I was >>> trying to start and install and OSGi bundle. But as soon as I try >> starting >>> the OSGI bundle, I always get this below exception- >>> >>> * Unresolved constraint in bundle GoldenlseyeStorageService [1]: >> Unable >>> to resolve 1.0: missing requirement [1.0] osgi.wiring.package; >>> >> (&(osgi.wiring.package=com.host.kernel.logger)(version>=1.19.0)(!(version>=2.0.0))) >>> * >>> >>> The company that I am working for they have made there own logger code >>> which is extending Apache Log4j. And this package >> `com.host.kernel.logger` >>> is coming from there jar file. Meaning my bundle is depending on this jar >>> maven dependency somehow. And I am not sure how can I fix the above >>> exception as it might be possible, I might need to depend on some other >>> maven dependency of our company specific that is stored in our own >>> repository. >>> Below is my simple code which is starting the OSGi framewok and then >>> trying to install/start the bundle- >>> >>> import java.io.File; >>> >>> import org.apache.tomcat.util.http.fileupload.FileUtils; >>> import org.osgi.framework.Bundle; >>> import org.osgi.framework.BundleActivator; >>> import org.osgi.framework.BundleContext; >>> import org.osgi.framework.BundleException; >>> import org.osgi.framework.launch.Framework; >>> import org.osgi.framework.launch.FrameworkFactory; >>> >>> public class TestOSGi { >>> >>> public static void main(String[] args) { >>> >>> try { >>> FileUtils.deleteDirectory(new File("felix-cache")); >>> FrameworkFactory frameworkFactory = >>> ServiceLoader.load(FrameworkFactory.class).iterator().next(); >>> >>> Framework framework = frameworkFactory.newFramework(new >> HashMap<String, >>> String>()); >>> framework.start(); >>> >>> final BundleContext bundleContext = framework.getBundleContext(); >>> final List<Bundle> installedBundles = new LinkedList<Bundle>(); >>> >>> BundleActivator b = new org.ops4j.pax.url.mvn.internal.Activator(); >>> b.start(bundleContext); >>> >>> String localFilename = >>> "file:C:\\Storage\\GoldenlseyeStorageService-1.0.0.jar"; >>> >>> installedBundles.add(bundleContext.installBundle(localFilename)); >>> >>> for (Bundle bundle : installedBundles) { >>> bundle.start(); >>> } >>> >>> } catch (IOException e) { >>> e.printStackTrace(); >>> } catch (BundleException e) { >>> e.printStackTrace(); >>> } catch (Exception e) { >>> e.printStackTrace(); >>> } >>> >>> } >>> } >>> Below is the manifest file for my `GoldenlseyeStorageService` bundle >> that I >>> am trying to install- >>> >>> Manifest-Version: 1.0 >>> Bnd-LastModified: 1377333824248 >>> Build-Jdk: 1.6.0_26 >>> Built-By: rjamal >>> Bundle-Description: Managed dependencies and plugins across all >> Raptor a >>> pplications. >>> Bundle-ManifestVersion: 2 >>> Bundle-Name: GoldenlseyeStorageService >>> Bundle-SymbolicName: GoldenlseyeStorageService >>> Bundle-Version: 1.0.0 >>> Created-By: Apache Maven Bundle Plugin >>> Export-Package: com.host.domain.sharedpersonalize.storageservice;use >>> >> s:="com.host.soaframework.common.exceptions,com.host.marketplace.servic >>> es.storageservice,com.host.personalize.services.storage.consumer.ge >>> n,com.host.personalize.services.storage.consumer,com.host.soaframew >>> >> ork.sif.service,com.host.marketplace.services,com.host.kernel.logger";v >>> >> ersion="1.0.0",com.host.marketplace.services.storageservice;uses:="java >>> >> x.xml.bind.annotation,com.host.marketplace.services,javax.activation";v >>> ersion="1.0.0",com.host.personalize.services.storage.consumer;uses: >>> ="javax.xml.ws >> ,com.host.marketplace.services.storageservice";version="1 >>> .0.0",com.host.personalize.services.storage.consumer.gen;uses:="com >>> .host.soaframework.common.exceptions,com.host.personalize.services. >>> >> storage.consumer,com.host.soaframework.sif.impl.internal.service,com.eb >>> ay.soaframework.sif.service,javax.xml.ws >> ,com.host.marketplace.services. >>> >> storageservice,com.host.soaframework.common.types,com.host.soaframework >>> >> .common.impl.internal.schema,javax.xml.namespace,com.host.soaframework. >>> common.registration";version="1.0.0" >>> Import-Package: >> com.host.kernel.logger;version="[1.19,2)",com.host.marke >>> >> tplace.services;version="[1.7,2)",com.host.soaframework.common.exceptio >>> >> ns;version="[1.4,2)",com.host.soaframework.common.impl.internal.schema; >>> >> version="[1.4,2)",com.host.soaframework.common.registration;version="[1 >>> .4,2)",com.host.soaframework.common.types;version="[1.4,2)", >> com.host.so >>> >> aframework.sif.impl.internal.service;version="[1.4,2)",com.host.soafram >>> >> ework.sif.service;version="[1.4,2)",javax.activation,javax.xml.bind.ann >>> otation,javax.xml.namespace,javax.xml.ws >>> ServicesURLStrategyVersion: 1.0.0-RELEASE >>> Tool: Bnd-1.50.0 >>> X-Raptor-Source-Dir: >>> S:\GitViews\GoldenlseyeStream\GoldenlseyeStorageServic >>> >>> >> e/src/main/webapp,S:\GitViews\GoldenlseyeStream\GoldenlseyeStorageService/ >>> >>> >> src/main/resources,S:\GitViews\GoldenlseyeStream\GoldenlseyeStorageService >>> >>> >>> Can anyone help me with this? >> >> >> --------------------------------------------------------------------- >> 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]

