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.