*> only y and y.inject must be in two separate JARs.* Does this work without *any* module having a `requires y.inject`? If so, how is the y.inject module get included without a `requires y.inject` being specified? (There is an obvious follow up question if that is the case as it likely breaks the case where only y module is used).
Cheers, Rob. On Tue, 25 Apr 2023 at 01:32, Ron Pressler <ron.press...@oracle.com> wrote: > > > On 24 Apr 2023, at 14:23, Josiah Noel <josiahn...@gmail.com> wrote: > > > >> I’m confused. To use the implementation of the `x.Plugin` service >> (defined in X) that you want Y to `provides` an implementation of, some >> module *must* have a `uses x.Plugin`. The runtime has to know that that >> service is needed by the program. Maybe the application `uses` it, but X >> itself could also declare that it `uses` an implementation of a service >> interface that it, itself, declares. So perhaps it is X that `uses >> X.plugin`, but someone has to actually say they want to use the service. >> > > I believe I'm picking up what you're putting down, but let's review it > again to be sure. > > > In artifact X we have: > > >> exports x.spi; >> uses x.spi.Plugin; >> > > in artifact Y we have two modules: y and y.inject. > > exports y.stuff; >> > > And > >> requires x; >> provides x.spi.Plugin with y.inject.PluginImpl; >> > > With this in mind, we have two situations we want to support. we have an > application Z that wants to use the Y artifact alone and a case where Z > wants to use X and Y. > > With Y alone, the z module should look like this correct? > > requires y; >> > > And in the case where Z wants both X and Y (with X doing the > service-loading), we do: > > requires x; >> requires y; >> > > Am I right to understand that X will service load the y.inject plugin > correctly? > > > Yes. > This is also how it works today, only y and y.inject must be in two > separate JARs. > > — Ron >