Update the code to provide support for JPMS in Vert.x 5.
This contribution does not add JPMS support yet, it prepares the vertx-core artefacts to use JPMS.
The main motivations driving this effort are:
support an internal API for Vert.x stack and integrators of Vert.x (e.g. Quarkus, etc...) that does not use qualified exports (export pkg to module) since this approach couples the modules to the users of this module, which workrs only in a closed world (i.e vertx stack exclusively)
hide the internal API from most users that shall not see this when they do not need it
The pattern used to implement this is the following:
an api module which contains the public API
an internal module that requires the api module which contains the internal API
a impl module that requires transitively the api module and the internal module
Users in practice will use the impl module, will see the api module but will not see the internal module unless they explicitly require it.
In the context of vertx-core the mapping is
api : module=io.vertx.core.api, GAV=vertx-core-api, package=io.vertx.core
This approach keeps the io.vertx.core package for vertx-core-api and preserves the backward compatibility of existing APIs. The internal API and the implementation however package names are changed in order to avoid a JPMS split package.
Update the code to provide support for JPMS in Vert.x 5.
This contribution does not add JPMS support yet, it prepares the vertx-core artefacts to use JPMS.
The main motivations driving this effort are:
export pkg to module
) since this approach couples the modules to the users of this module, which workrs only in a closed world (i.e vertx stack exclusively)The pattern used to implement this is the following:
Users in practice will use the impl module, will see the api module but will not see the internal module unless they explicitly require it.
In the context of vertx-core the mapping is
io.vertx.core.api
, GAV=vertx-core-api
, package=io.vertx.core
io.vertx.core.internal
, GAV=vertx-core-internal
, package=io.vertx.internal.core
io.vertx.core
, GAV=vertx-core
, package=io.vertx.impl.core
This approach keeps the
io.vertx.core
package forvertx-core-api
and preserves the backward compatibility of existing APIs. The internal API and the implementation however package names are changed in order to avoid a JPMS split package.An alternative of https://github.com/eclipse-vertx/vert.x/pull/5233