Skip to content

build: JPMS modules for the library, surefire and failsafe on the module path - #538

Open
dfa1 wants to merge 5 commits into
mainfrom
build/jpms
Open

dfa1 wants to merge 5 commits into
mainfrom
build/jpms

Conversation

@dfa1

@dfa1 dfa1 commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Supersedes the stale draft #176; the decision and rules are recorded in ADR 0024 (updated from Proposed to Accepted).

Named modules (module name = package root): core, fsst, reader, writer, csv, jdbc, inspector (io.github.dfa1.vortex.inspect, matching its package, not the artifact name). integration gets a code-less main descriptor so failsafe runs on the module path too (2,951 tests).

Stable Automatic-Module-Name for parquet, calcite, cli, fbs-gen, proto-gen: they depend on jars with no descriptor (hardwood, calcite) or are tools, which ADR 0024 says a published module should not requires. performance, demo, fuzz are unpublished and stay on the classpath.

Details:

  • core exports fbs/proto only to the modules that need them; ArrayStats.fromFbs and VariantData suppress the exports lint where a generated type is part of a public signature.
  • The writer never requires the reader: its tests see the reader on the test classpath, and the needed --add-reads/--add-exports are test-JVM flags in the writer POM (test.modules.args).
  • zstd is a named module, so native access is enabled by name (--enable-native-access=io.github.dfa1.zstd) instead of ALL-UNNAMED.
  • The core test-jar now only ships core.testing: it used to re-declare core's packages, a split package on the module path.
  • DocsJavaCompilerTest compiles the doc snippets against the module path as well as the classpath.
  • JDK 26's incubating-module lint (jdk.incubator.vector via core's requires static) is silenced in the root compiler config.

Verified locally on JDK 25 and 26 (./mvnw verify, plus the -Dtest.vector.args= leg); CI green on macOS, Linux and Windows.

🤖 Generated with Claude Code

dfa1 and others added 3 commits October 13, 2026 09:14
… on the module path

Supersedes the stale draft in #176. core exports fbs/proto only to the modules that
need them; reader/writer require fsst/zstd (zstd optional). The writer's round-trip
tests reach the reader on the test classpath, so the extra --add-reads/--add-exports
live in the writer POM's test.modules.args, not in module-info. zstd is now a named
module on the module path, so reader/writer enable native access for it by name.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ves core (JDK 26)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014XbfcWGFnphybshhTRjjUo
…utomatic-Module-Name for the rest

csv/jdbc/inspector are named modules (inspect, not inspector, to match the package root).
integration gets a code-less main descriptor so failsafe runs on the module path; the
core test-jar now only ships the testing package (it re-declared core's packages, a split
package on the module path). parquet, calcite, cli and the generators depend on jars
without a descriptor or are tools, so they pin an Automatic-Module-Name instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014XbfcWGFnphybshhTRjjUo
@dfa1 dfa1 changed the title build: named JPMS modules for core, fsst, reader and writer build: JPMS modules for the library, surefire and failsafe on the module path Oct 13, 2026
dfa1 and others added 2 commits October 14, 2026 07:20

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant