I don't even think there's even a wide view across the Java ecosystem
regarding JPMS. So far all usages of Apache Arrow I've seen do not require
JPMS, and amongst the sister projects I checked (Parquet, Iceberg), none of
them have added support for JPMS.

I don't know how many dependencies used by Arrow actually do not specify a
module name or provide module info, but if the way to address it is to get
all of them shaded within Arrow, then I would oppose this proposal as I
would imagine this would bloat all the jars and would make security issues
more complicated to discover and address (instead of quickly identifying a
vulnerable dependency through the dependency tree, it would require to also
check the shaded classes and get a new arrow version whereas it could have
been addressed by a simple dependency update)



On Thu, Jun 13, 2024 at 6:14 PM Norman Jordan
<norman.jor...@improving.com.invalid> wrote:

> For clarity, this only applies to legacy libraries that Arrow depends on.
> All Arrow modules are proper JPMS modules and have a "module-info.java"
> file.
> ________________________________
> From: Norman Jordan <norman.jor...@improving.com.INVALID>
> Sent: Thursday, June 13, 2024 9:08 AM
> To: dev@arrow.apache.org <dev@arrow.apache.org>
> Subject: [DISCUSS][Java] Automatic Modules with JPMS
>
> Do we want to continue to use automatic modules with JPMS? Is there a
> wider Apache view on automatic JPMS modules?
>
> An automatic module is a Java library that does not have a
> "module-info.java" file and is included in the "source-path" for Java 9 or
> higher. Java will create a module with a name based on the filename of the
> Jar file.
>
> Advantages:
>
>   *
> Makes it easy to have JPMS dependencies on legacy libraries
>   *
> Allows the use of legacy libraries without putting them in the UNNAMED
> module and requiring flags at build/run time
>
> Disadvantages:
>
>   *
> Adds a limitation on the Jar filenames of legacy libraries
>   *
> At build time there is a clear warning displayed mentioning that it is
> unsafe to distribute a project using automatic modules
>
> To better understand the issue, let's consider a legacy library
> (flatbuffers-java). A user of Arrow would be expected to have the Arrow Jar
> files as well as the dependencies. If they use the name
> "flatbuffersjava.jar" for the "flatbufffers-java" Jar file, then Java will
> create a different "JPMS" module ("flatbuffersjava" in this case) and all
> declared dependencies on "flatbuffers.java" would fail.
>
> This is an unlikely scenario especially since most people would build
> using Maven or Gradle. It is adding another restriction on how users build
> projects with Arrow though and may be difficult to communicate.
>
>
> A possible workaround is to shade in legacy Jar files. The classes from
> them would be included in Arrow Jar files. A user of Arrow would no longer
> see a dependency on legacy libraries and would not need to worry about Java
> flags or filenames.
>

Reply via email to