0

I have two bundle say A and B. A depends on B (specified as Required-Bundle:B at A's MANIFEST).

Now I installed both A, B bundles one by one (by calling BundleContext.installBundle). Then when I try to start bundle A, I'm getting following error

org.osgi.framework.BundleException: Could not resolve module: A [140]
  Unresolved requirement: Require-Bundle: B; bundle-version="1.0.0"

I understand from the exception that bundle B is not yet started(resolved). Now how to solve this problem?

Only way to solve this problem is sorting bundles by it's dependencies? Or Are there any options like specifying a folder to OSGi runtime so that any bundle files copied to it will be activated?

By the way, I'm using equinox.

pgollangi
  • 848
  • 3
  • 13
  • 28
  • 1
    It sounds like Bundle B is not yet installed when you start Bundle A? The framework will automatically try to resolve B when it is installed, you don't have to start it. – Peter Kriens Jan 19 '16 at 15:40

1 Answers1

4

Make sure you install ALL of the bundles before you start ANY of them. I.e. you need to do this:

  1. Install A, Install B
  2. Start A, Start B.

and NOT this:

  1. Install A, Start A
  2. Install B, Start B

In the second (wrong) scenario, you will get a resolution error because A depends on B and B doesn't exist yet as far as OSGi is concerned.

In the first (correct) scenario, when you start A, OSGi will work out that it needs to resolve both A and B in order to satisfy the dependencies.

[By the way, in your question you seem to be confusing starting with resolving: you said "B is not yet started(resolved)". These are different things entirely. B only needs to be installed before you start A, and OSGi will resolve it automatically when it needs to.]

Neil Bartlett
  • 23,743
  • 4
  • 44
  • 77