Subject | Java 9 Automatic module name |
---|---|
Author | Mark Rotteveel |
Post date | 2017-09-30T11:48:40Z |
Current versions of Jaybird work with Java 9, but I hadn't considered
some implications of the JPMS (Java Platform Module System).
The JPMS assigns an automatic module name to non-modular jars, and this
name is - by default - derived from the jar filename.
This means that its name depends on which jar you use. So when you use
the jar from github/firebirdsql.org, it will get the automatic module
name jaybird (or jaybird-full), and using maven will assign the
automatic module name jaybird-jdkXX (eg jaybird-jdk18).
This is not a real problem, until you modularize your own application,
because then you might run into issues when Jaybird will actually
modularize and provide an actual modulename (problems as in: you can't
just drop in a new version of Jaybird, you will need to recompile with
the updated module name).
Plans to modularize Jaybird for Java 9 are still in its infancy, but I
propose that next releases of Jaybird 2.2.x and 3.0.x will declare an
explicit automatic module name for future consistency.
For this automatic module name, I see two candidates:
- org.firebirdsql.jaybird
- org.firebirdsql.jdbc.jaybird
The first is short and to the point and includes the current 'name', and
could allow for logical names when breaking up Jaybird into multiple
modules (eg org.firebirdsql.jdbc for the JDBC driver part,
org.firebirdsql.management for the management classes, etc), while still
providing a single module that exports all.
The second aligns with the maven coordinates (dropping the -jdkXX
suffix), but might be a bit awkward for naming modules in the future.
Any thoughts on this?
--
Mark Rotteveel
some implications of the JPMS (Java Platform Module System).
The JPMS assigns an automatic module name to non-modular jars, and this
name is - by default - derived from the jar filename.
This means that its name depends on which jar you use. So when you use
the jar from github/firebirdsql.org, it will get the automatic module
name jaybird (or jaybird-full), and using maven will assign the
automatic module name jaybird-jdkXX (eg jaybird-jdk18).
This is not a real problem, until you modularize your own application,
because then you might run into issues when Jaybird will actually
modularize and provide an actual modulename (problems as in: you can't
just drop in a new version of Jaybird, you will need to recompile with
the updated module name).
Plans to modularize Jaybird for Java 9 are still in its infancy, but I
propose that next releases of Jaybird 2.2.x and 3.0.x will declare an
explicit automatic module name for future consistency.
For this automatic module name, I see two candidates:
- org.firebirdsql.jaybird
- org.firebirdsql.jdbc.jaybird
The first is short and to the point and includes the current 'name', and
could allow for logical names when breaking up Jaybird into multiple
modules (eg org.firebirdsql.jdbc for the JDBC driver part,
org.firebirdsql.management for the management classes, etc), while still
providing a single module that exports all.
The second aligns with the maven coordinates (dropping the -jdkXX
suffix), but might be a bit awkward for naming modules in the future.
Any thoughts on this?
--
Mark Rotteveel