Repository navigation
Conversation
dfa1
force-pushed
the
build/jpms
branch
2 times, most recently
from
October 25, 2026 14:26
88e3474 to
a129d18
Compare
core, fsst, reader, writer, csv, jdbc and inspector are named modules (module name = package root,
so inspector is io.github.dfa1.vortex.inspect); integration has a code-less main descriptor so failsafe
runs on the module path too. Tests stay in the packages they test and are patched into the module, as
surefire/failsafe and IntelliJ both do for a main-only module-info.
- core exports fbs/proto only to the modules that need them; a public signature carrying a generated
type suppresses the exports lint on that declaration instead of widening the export.
- The writer never requires the reader: its tests reach the reader on the test classpath, with the two
--add-exports of core's fbs/proto as test-JVM flags (test.modules.args). The one writer test using
java.net.http (HTTP zone-map pruning) moved to integration, so the writer test compile needs no flags
and IDEs import main and test with one compiler configuration.
- parquet and calcite depend on jars with no descriptor, so they pin a stable Automatic-Module-Name
instead; cli, jdbc-driver and the generators are never required and pin nothing.
- zstd is a named module: native access is enabled by name (--enable-native-access=io.github.dfa1.zstd).
- The core test-jar ships only core.testing (re-declaring core's packages is a split package).
- JDK 26+: the incubating-module lint is off for javac; javadoc, which cannot silence it, tolerates
that one warning in every module. Javadoc no longer auto-links sibling modules (the links pointed at
a non-existent ${project.url}/<artifact>/apidocs/ and failed classpath modules linking named ones).
- ADR 0024 moves from Proposed to Accepted with these rules.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SwhK4W5cgj7y7s4ZPCif5x
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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).integrationgets a code-less main descriptor so failsafe runs on the module path too.Stable
Automatic-Module-Namefor the librariesparquetandcalcite: they depend on jars with no descriptor (hardwood, calcite), which ADR 0024 says a published module should notrequires.cli,jdbc-driverand the generators are never required and pin nothing.performance,demo,fuzzare unpublished and stay on the classpath.Tests stay white-box: they live in the packages they test and are patched into the module (
--patch-module), as surefire/failsafe and IntelliJ both do for a module with a main-onlymodule-info.Details:
coreexportsfbs/protoonly to the modules that need them;ArrayStats.fromFbs,VariantData,EncodeResult,MinMax,CascadeStepandPrimitiveEncodingEncodersuppress theexportslint where a generated type is part of a public signature.requiresthe reader: its tests see the reader on the test classpath, and the two--add-exportsof core'sfbs/protoare test-JVM flags in the writer POM (test.modules.args). The writer test compile needs no flags, so IDEs import main and test with one compiler configuration; the one test that neededjava.net.http(HTTP zone-map pruning) moved tointegration.zstdis a named module, so native access is enabled by name (--enable-native-access=io.github.dfa1.zstd) instead ofALL-UNNAMED; the README says so.coretest-jar now only shipscore.testing: it used to re-declare core's packages, a split package on the module path.DocsJavaCompilerTestcompiles the doc snippets against the module path as well as the classpath.jdk.incubator.vectorviacore'srequires static) is silenced in the root compiler config; javadoc, which has no switch for it, tolerates that one warning on JDK 26+ in every module (root profile, moved fromcore).${project.url}/<artifact>/apidocs/and failed classpath modules (jdbc-driver,demo) linking a named one.Rebased onto main 2026-10-25. Verified locally on JDK 25 (
./mvnw verify) and JDK 26 (verify -DskipTests); CI green on macOS, Linux and Windows, JDK 25 and 27.🤖 Generated with Claude Code
https://claude.ai/code/session_01SwhK4W5cgj7y7s4ZPCif5x