Add Export-Package declarations for OSGi headers by io7m · Pull Request #6675 · ReactiveX/RxJava (original) (raw)
Thanks. Did you verify the jar file now contains the necessary entries?
Yep, the manifest now looks like this (from $ bnd print rxjava-3.0.0-SNAPSHOT.jar
):
Automatic-Module-Name io.reactivex.rxjava3
Bnd-LastModified 1571258568912
Bundle-Description Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
Bundle-DocURL https://github.com/ReactiveX/RxJava
Bundle-ManifestVersion 2
Bundle-Name rxjava
Bundle-SymbolicName rxjava
Bundle-Vendor RxJava Contributors
Bundle-Version 3.0.0.SNAPSHOT
Created-By 11 (Oracle Corporation)
Eclipse-ExtensibleAPI true
Export-Package io.reactivex.rxjava3.annotations;version="3.0.0",io.reactivex.rxjava3.core;uses:="io.reactivex.rxjava3.annotations,io.reactivex.rxjava3.disposables,io.reactivex.rxjava3.flowables,io.reactivex.rxjava3.functions,io.reactivex.rxjava3.observables,io.reactivex.rxjava3.observers,io.reactivex.rxjava3.parallel,io.reactivex.rxjava3.schedulers,io.reactivex.rxjava3.subscribers,org.reactivestreams";version="3.0.0",io.reactivex.rxjava3.disposables;uses:="io.reactivex.rxjava3.functions,org.reactivestreams";version="3.0.0",io.reactivex.rxjava3.exceptions;version="3.0.0",io.reactivex.rxjava3.flowables;uses:="io.reactivex.rxjava3.annotations,io.reactivex.rxjava3.core,io.reactivex.rxjava3.disposables,io.reactivex.rxjava3.functions";version="3.0.0",io.reactivex.rxjava3.functions;version="3.0.0",io.reactivex.rxjava3.observables;uses:="io.reactivex.rxjava3.annotations,io.reactivex.rxjava3.core,io.reactivex.rxjava3.disposables,io.reactivex.rxjava3.functions";version="3.0.0",io.reactivex.rxjava3.observers;uses:="io.reactivex.rxjava3.core,io.reactivex.rxjava3.disposables,io.reactivex.rxjava3.functions";version="3.0.0",io.reactivex.rxjava3.parallel;uses:="io.reactivex.rxjava3.annotations,io.reactivex.rxjava3.core,io.reactivex.rxjava3.functions,org.reactivestreams";version="3.0.0",io.reactivex.rxjava3.plugins;uses:="io.reactivex.rxjava3.core,io.reactivex.rxjava3.flowables,io.reactivex.rxjava3.functions,io.reactivex.rxjava3.observables,io.reactivex.rxjava3.parallel,org.reactivestreams";version="3.0.0",io.reactivex.rxjava3.processors;uses:="io.reactivex.rxjava3.annotations,io.reactivex.rxjava3.core,org.reactivestreams";version="3.0.0",io.reactivex.rxjava3.schedulers;uses:="io.reactivex.rxjava3.core";version="3.0.0",io.reactivex.rxjava3.subjects;uses:="io.reactivex.rxjava3.annotations,io.reactivex.rxjava3.core,io.reactivex.rxjava3.disposables";version="3.0.0",io.reactivex.rxjava3.subscribers;uses:="io.reactivex.rxjava3.core,io.reactivex.rxjava3.disposables,io.reactivex.rxjava3.observers,org.reactivestreams";version="3.0.0"
Import-Package io.reactivex.rxjava3.annotations,io.reactivex.rxjava3.functions,org.reactivestreams;version="[1.0,2)"
Manifest-Version 1.0
Private-Package io.reactivex.rxjava3.internal.disposables,io.reactivex.rxjava3.internal.functions,io.reactivex.rxjava3.internal.fuseable,io.reactivex.rxjava3.internal.observers,io.reactivex.rxjava3.internal.operators.completable,io.reactivex.rxjava3.internal.operators.flowable,io.reactivex.rxjava3.internal.operators.maybe,io.reactivex.rxjava3.internal.operators.mixed,io.reactivex.rxjava3.internal.operators.observable,io.reactivex.rxjava3.internal.operators.parallel,io.reactivex.rxjava3.internal.operators.single,io.reactivex.rxjava3.internal.queue,io.reactivex.rxjava3.internal.schedulers,io.reactivex.rxjava3.internal.subscribers,io.reactivex.rxjava3.internal.subscriptions,io.reactivex.rxjava3.internal.util
Require-Capability osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.6))"
Tool Bnd-4.2.0.201903051501
[IMPEXP]
Import-Package
io.reactivex.rxjava3.annotations
io.reactivex.rxjava3.functions
org.reactivestreams {version=[1.0,2)}
Export-Package
io.reactivex.rxjava3.annotations {version=3.0.0}
io.reactivex.rxjava3.core {version=3.0.0}
io.reactivex.rxjava3.disposables {version=3.0.0}
io.reactivex.rxjava3.exceptions {version=3.0.0}
io.reactivex.rxjava3.flowables {version=3.0.0}
io.reactivex.rxjava3.functions {version=3.0.0}
io.reactivex.rxjava3.observables {version=3.0.0}
io.reactivex.rxjava3.observers {version=3.0.0}
io.reactivex.rxjava3.parallel {version=3.0.0}
io.reactivex.rxjava3.plugins {version=3.0.0}
io.reactivex.rxjava3.processors {version=3.0.0}
io.reactivex.rxjava3.schedulers {version=3.0.0}
io.reactivex.rxjava3.subjects {version=3.0.0}
io.reactivex.rxjava3.subscribers {version=3.0.0}
In addition, I tried resolving a small test program and didn't run into any issues. If we see issues, I'll file new tickets.
why would those two RxJava packages appear?
It's considered a best practice in the current OSGi world to do this because it allows for better consistency in the presence of multiple bundles exporting the same packages. This blog post explains it a bit clumsily:
https://blog.osgi.org/2007/04/importance-of-exporting-nd-importing.html
It's not really critical to understand the details. It's probably enough to know that all of the various OSGi toolchains do this kind of "import my own exports" by default these days. I agree it looks odd.