Multi platform "test.bndrun" file: define a required bundle (`-runrequires`) specifically for macOS

24 views Asked by At

I am running tests using bnd (from the Bndtools project) with gradle

I am writing a bundle that should have a runtime dependency when running on macOS to the bundle org.eclipse.jdt.launching.macosx available here:

<dependency>
    <groupId>org.eclipse.jdt</groupId>
    <artifactId>org.eclipse.jdt.launching.macosx</artifactId>
    <version>3.6.0</version>
</dependency>

The problem is that if I add the line to my test.bndrun like this:

-runrequires: 
    bnd.identity;id='org.eclipse.jdt.launching.macosx'

It works fine on macOS but is failing under linux with:

! org.osgi.framework.FrameworkEvent[source=org.eclipse.jdt.launching.macosx_3.4.400.v20190925-0944 [74]]
! could not resolve the bundles: [org.eclipse.jdt.launching.macosx-3.4.400.v20190925-0944 org.osgi.framework.BundleException: Could not resolve module: org.eclipse.jdt.launching.macosx [74]
  Unresolved requirement: Require-Capability: eclipse.platform; filter:="(osgi.os=macosx)"
​
]
! Failed to start bundle org.eclipse.jdt.launching.macosx-3.4.400.v20190925-0944, exception Could not resolve module: org.eclipse.jdt.launching.macosx [74]
  Unresolved requirement: Require-Capability: eclipse.platform; filter:="(osgi.os=macosx)"
​
org.osgi.framework.BundleException: Could not resolve module: org.eclipse.jdt.launching.macosx [74]
  Unresolved requirement: Require-Capability: eclipse.platform; filter:="(osgi.os=macosx)"
​
        at org.eclipse.osgi.container.Module.start(Module.java:463)
        at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:445)
        at aQute.launcher.Launcher.start(Launcher.java:686)
        at aQute.launcher.Launcher.startBundles(Launcher.java:666)
        at aQute.launcher.Launcher.activate(Launcher.java:572)
        at aQute.launcher.Launcher.launch(Launcher.java:402)
        at aQute.launcher.Launcher.run(Launcher.java:184)
        at aQute.launcher.Launcher.main(Launcher.java:160)
        at aQute.launcher.pre.EmbeddedLauncher.executeWithRunPath(EmbeddedLauncher.java:170)
        at aQute.launcher.pre.EmbeddedLauncher.findAndExecute(EmbeddedLauncher.java:135)
        at aQute.launcher.pre.EmbeddedLauncher.main(EmbeddedLauncher.java:52)
TEST [74] org.eclipse.jdt.launching.macosx;3.4.400.v20190925-0944 <<< ERROR: Could not resolve module: org.eclipse.jdt.launching.macosx [74]
  Unresolved requirement: Require-Capability: eclipse.platform; filter:="(osgi.os=macosx)"
​
org.osgi.framework.BundleException: Could not resolve module: org.eclipse.jdt.launching.macosx [74]
  Unresolved requirement: Require-Capability: eclipse.platform; filter:="(osgi.os=macosx)"
​
        at org.eclipse.osgi.container.Module.start(Module.java:463)
        at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:445)
        at aQute.tester.bundle.engine.discovery.BundleSelectorResolver.lambda$resolve$14(BundleSelectorResolver.java:234)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
        at aQute.tester.bundle.engine.discovery.BundleSelectorResolver.resolve(BundleSelectorResolver.java:228)
        at aQute.tester.bundle.engine.discovery.BundleSelectorResolver.resolve(BundleSelectorResolver.java:103)
        at aQute.tester.bundle.engine.BundleEngine.discover(BundleEngine.java:63)
        at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:103)
        at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:85)
        at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:92)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
        at aQute.tester.junit.platform.Activator.test(Activator.java:439)
        at aQute.tester.junit.platform.Activator.automatic(Activator.java:344)
        at aQute.tester.junit.platform.Activator.run(Activator.java:216)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at aQute.launcher.Launcher.launch(Launcher.java:450)
        at aQute.launcher.Launcher.run(Launcher.java:184)
        at aQute.launcher.Launcher.main(Launcher.java:160)
        at aQute.launcher.pre.EmbeddedLauncher.executeWithRunPath(EmbeddedLauncher.java:170)
        at aQute.launcher.pre.EmbeddedLauncher.findAndExecute(EmbeddedLauncher.java:135)
        at aQute.launcher.pre.EmbeddedLauncher.main(EmbeddedLauncher.java:52)

So how should I express the fact that a dependency is depending on the OS?

0

There are 0 answers