We also raised the same issue a while back. https://mail.openjdk.org/pipermail/jigsaw-dev/2023-April/date.html#14853
A possible solution that was discussed was to have a mechanism to have multiple modules in a single jar. (But obviously that hasn't been implemented yet) We managed to solve it in our library via a circular plugin dependency. (Library A has a dependency on Plugin B which depends on an older version of library A to provide A's functionality to Library C) It's pretty painful to setup/modify, but if you don't expect the spi implementation to change that much it works I guess. Even so I also wish there was an easier way to provide optional services so we don't have to go through that whole circular song and dance. On Wed, Jan 8, 2025, 12:58 PM David Lloyd <david.ll...@redhat.com> wrote: > It is not uncommon for a library to contain a provider for a service where > the service resides in an optional dependency. It is also sometimes > desirable to use a service from an optional dependency. > > In JPMS, we can use `requires static` to indicate that the library will > function without the dependency being present. We can declare that we use > or provide a service from the optional dependency. Compilation will > complete successfully in this case, because the descriptor is valid. > > However, at run time, the module will fail to resolve if any provider or > uses comes from a module that is not present when the layer is resolved. > This is not desired behavior, because the user has already opted in to and > indicated that the dependency in question is optional, and should not cause > a run time problem if not present. > > The current behavior is inconsistent between compile and run time, and > should be revisited. > -- > - DML • he/him >