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?