Java and Maven development¶
The repository contains one experimental Java artifact,
org.meridiandb:meridiandb-core:0.1.0-SNAPSHOT. It contains immutable experimental
command, query, interval, result and commit-position types in
org.meridiandb.temporal. A test-only reference model executes
the canonical contract histories and seeded checks alongside the
embedded in-memory engine in org.meridiandb.engine.
The engine is experimental and memory-only. The journal codec and
local file adapter in org.meridiandb.storage.journal provide
bounded append, force and replay independently of that engine. The pure
immutable history codec adds exact
segment bytes and content identity. The local segment adapter
adds create-only file writes and verified heap readers. The
manifest codec and verifier add
complete-set consistency against a reconstructed journal-prefix binding. The
local checkpoint store adds actual owner-journal verification,
immutable generation publication and verified reopen under explicit filesystem
capabilities. Local database recovery restores read-only
temporal queries and request lookup from complete checkpoint history plus the
journal suffix. Explicit writable modes now synchronize startup and force each
new record before atomic query publication and acknowledgement.
Durability conformance adds process exits, retry and
canonical/seeded writable-reopen checks.
Pure history compaction validates supplied checkpoint
history and returns bounded exact-history replacement proposals. Local compaction
publication now verifies/reuses or installs outputs and selects the next generation
at the same cutoff. Lazy readers now hold independent shared cross-process
protection, with explicit release/cleanup behavior. Protected
physical deletion remains planned. A bounded inventory
now verifies explicit retained roots and obsolete-object metadata without removal.
No library is published.
Build and verify¶
Install a JDK from the Java 25 line, the baseline recorded in .java-version
and compiler release in pom.xml. Select it through JAVA_HOME/PATH in your
normal environment. A separately installed Maven is not required. The
build decision explains this baseline.
Run from the repository root on macOS or Linux:
./mvnw -B verify
On Windows PowerShell:
.\mvnw.cmd -B verify
The wrapper downloads Maven 3.10.0 on first use, checks the distribution's pinned
SHA-256, and caches it. Maven resolves pinned plugins and test dependencies from
Maven Central, so a cold build needs network access. The POSIX bootstrap needs a
shell, unzip and either sha256sum or shasum; it can download through curl,
wget or its Java fallback. The Windows launcher uses PowerShell.
Verification compiles production/test code, runs JUnit Jupiter and produces the
local target/meridiandb-core-0.1.0-SNAPSHOT.jar. Reports are under
target/surefire-reports/. target/ is ignored. The artifact has no external
runtime dependencies; JUnit and Jackson are test-only. The command does not
install a library into a remote repository or publish a release.
To remove stale output before verifying:
./mvnw -B clean verify
To inspect the actual Maven and Java runtime selected by the wrapper:
./mvnw -version
The current 747 test invocations include 69 reclamation inventory checks, 70 reader protection/identity/cleanup checks, 55 local compaction publication/integration/process checks, 57 pure compaction checks, 55 typed query checks, 50 durable conformance checks, 49 commit preparation/initialization/publication checks, 37 local database recovery checks, 39 local checkpoint publication checks, 45 manifest codec/consistency checks, 36 local segment I/O/lifetime checks, 27 immutable segment codec checks, 29 journal codec checks, 58 local journal I/O/process/prefix checks and 71 temporal/engine checks: 18 interval boundary checks, eight type checks, ten reference/decoding checks, five canonical histories per implementation, 16 seeded histories comparing both implementations with dense snapshots, and nine engine lifecycle/concurrency checks. The memory engine and reference each execute 84 exact fixture expectations and 512 seeded new transactions. Local read recovery executes the canonical histories in three checkpoint shapes. The reference guide and engine guide explain coverage and limits. The local adapters have separate failure/reopen tests; forced local writes and atomic publication have focused checks alongside real process exits and seeded writable reopen. The journal specification documents golden bytes, corruption/truncation, exact identity and allocation-limit coverage.
Run the embedding example after verification, on either platform:
java --class-path target/classes examples/EmbeddedExample.java
This uses JDK source-file launch mode with the compiled project classes. There is no extra execution plugin or example dependency.
Project conventions¶
Use standard src/main/java and src/test/java layouts. Keep production packages
under org.meridiandb; the first primitive lives in .temporal. Match test package
and source names, with *Test classes discovered by Surefire. Use JUnit Jupiter,
exact contract expectations and focused failure cases. The build fails when no
tests are discovered. Production code compiles with --release 25, -Xlint:all
and -Werror; preview features are not enabled.
Start with one JAR and introduce another module only for an actual deliverable.
The group/artifact coordinates are project conventions, not a Maven Central
publication or verified-namespace claim. No release repository is configured.
The records and their nullable unbounded endpoints are experimental Java syntax;
the logical contract remains authoritative as the type set develops. Maven loads
docs/architecture/fixtures/temporal-contract-v0.json and temporal-query-v0.json
as test resources under contracts/; keep those sources authoritative rather than
copying their expectations.
The seed corpus is src/test/resources/reference-seeds.txt. Test code/resources
and their JSON parser stay outside the production JAR.
Pin build/test plugins in the POM, including the default clean/verify lifecycle
and managed install/deploy/wrapper goals. Install/deploy versions are managed for
predictability, without binding either goal to verification. Maven site generation
is not part of this build; the documentation toolchain remains separate.
project.build.outputTimestamp fixes archive timestamps for repeatable packaging
from identical inputs and JDK; it is not a release date or a guarantee that every
compiler patch/vendor emits identical bytes.
Research Maven versions for every Maven change¶
For Maven implementation, build or dependency changes, check the current versions of the affected pinned artifacts: Maven, wrapper components, lifecycle/test plugins and direct dependencies. Use Maven Central metadata and official project release and compatibility documentation. Record the date, coordinates, latest stable release, selected version and any compatibility/security reason for a difference. The dated table below records the current selection.
Research before selecting versions; do not substitute a remembered version or a
passing cached build. Metadata latest and release can point to prereleases:
the initial Maven metadata points to Maven 4 RC and several plugin 4.x betas.
Check the release channel and runtime requirements. Prefer the latest stable
compatible release, then pin its exact version. A prerelease needs a concrete
reason and validation. Keep transitive dependencies governed by their pinned
upstream artifacts unless a researched compatibility/security finding requires
an explicit override; inspect the resolved graph when that contract changes.
Floating LATEST, version ranges and snapshot dependencies are not the update
mechanism. The project's own unreleased 0.1.0-SNAPSHOT is separate from that rule.
Artifact research checked on 2026-10-29¶
These are dated findings, not a promise that the versions remain latest. POM and
wrapper properties own executable configuration. Apache's
download page recommends Maven 3.10.0;
Maven 4 is preview. The plugin catalog
confirms the stable Maven 3 plugin lines. The
JUnit guide identifies JUnit 6.1.3 and
its Java 17 minimum, compatible with this Java 25 baseline. Jackson 3.2.4 decodes
canonical temporal and query test fixtures. The Jackson project
documents its 3.x tools.jackson packages and Java 17 baseline. Its tree model lets
the adapter reject non-integral or out-of-range values before constructing a
transaction. The journal codec uses JDK CRC32C and byte buffers, adding no runtime
dependency. The local adapter also uses only JDK file I/O. All twelve metadata
sources and official Maven/JUnit/Jackson compatibility information were rechecked
for reclamation inventory on October 29 at 15:18:57 Toronto / 19:18:57 UTC; the selected versions remain
unchanged. The segment and manifest codecs use standard JDK SHA-256/CRC32C and
the local adapters use JDK file I/O, with no new dependency.
| Artifact | Selected stable version | Metadata latest entry | Evidence |
|---|---|---|---|
org.apache.maven:apache-maven |
3.10.0 | 4.0.0-rc-7 | Central metadata |
org.apache.maven.wrapper:maven-wrapper-distribution |
3.3.4 | 3.3.4 | Central metadata |
org.apache.maven.plugins:maven-wrapper-plugin |
3.3.4 | 3.3.4 | Central metadata |
org.apache.maven.plugins:maven-clean-plugin |
3.5.0 | 4.0.0-beta-3 | Central metadata |
org.apache.maven.plugins:maven-resources-plugin |
3.5.0 | 4.0.0-beta-2 | Central metadata |
org.apache.maven.plugins:maven-compiler-plugin |
3.16.0 | 4.0.0-beta-5 | Central metadata |
org.apache.maven.plugins:maven-surefire-plugin |
3.6.1 | 3.6.1 | Central metadata |
org.apache.maven.plugins:maven-jar-plugin |
3.5.1 | 4.0.0-beta-2 | Central metadata |
org.apache.maven.plugins:maven-install-plugin |
3.2.0 | 4.0.0-beta-3 | Central metadata |
org.apache.maven.plugins:maven-deploy-plugin |
3.2.0 | 4.0.0-beta-3 | Central metadata |
org.junit.jupiter:junit-jupiter |
6.1.3 | 6.1.3 | Central metadata |
tools.jackson.core:jackson-databind |
3.2.4 | 3.2.4 | Central metadata |
All selected entries are the latest stable releases found. Newer metadata entries in the Maven/plugin 4.x series are RC/beta releases, so they are not selected for the stable Maven 3 build. The Enforcer plugin was also researched but is not needed for this small foundation; javac's release setting and the wrapper define the current baseline without another verification plugin.
Wrapper provenance and updates¶
The scripts were generated with Apache Maven Wrapper Plugin 3.3.4, using its
only-script distribution. Both launchers are tracked; mvnw is executable with
LF endings and mvnw.cmd uses CRLF on checkout. There is no wrapper JAR to commit.
The Maven ZIP at the wrapper's distributionUrl was compared against Apache's
published SHA-512.
Its computed SHA-256 is pinned as distributionSha256Sum in
.mvn/wrapper/maven-wrapper.properties. A fresh-bootstrap negative check also
confirmed rejection of an incorrect checksum. This verifies distribution integrity;
it does not claim independent signature verification of every dependency.
After researching a wrapper/runtime update, generate the scripts using fully qualified, exact plugin/version arguments. The initial reproducible generation command is:
./mvnw org.apache.maven.plugins:maven-wrapper-plugin:3.3.4:wrapper -Dmaven=3.10.0 -Dtype=only-script
Generation can rewrite wrapper properties. Verify the selected archive against
Apache's official checksum, restore its exact SHA-256 pin before building, review
the scripts/properties and run a fresh bootstrap plus ./mvnw -B verify. Keep the
checksum when resolving missing bootstrap tools. Update POM management, research
evidence and build guidance with a version change.
Continuous integration¶
Java checks runs on affected pull requests and pushes to main, with read-only
repository permissions and credentials removed after checkout. Linux runs
./mvnw -B verify; Windows runs .\mvnw.cmd -B verify. Both select Temurin from
.java-version, checking for the latest patch in that Java line. Action versions
are pinned by commit; CI prints the actual runtime. Maven dependencies are cached
by POM content. Changes to the temporal contract, journal format or canonical fixture directory
also trigger Java checks, since they affect executable expectations. No Java
artifact is uploaded or released by this workflow. Both platforms also run twelve
examples: embedded queries, local journal, pure segment codec, local immutable
files, manifest consistency, local checkpoint publication, local read recovery,
forced local writes, typed temporal queries, pure history compaction, local
compaction publication and reclamation inventory. The five local
checkpoint/recovery/write/compaction/inventory examples
report an unavailable
directory open/force capability
explicitly; capability-dependent real-file tests skip on that specific boundary
while injected checks still run.
Changes under examples/ trigger these checks.
Documentation checks and automatic Pages publication retain their own workflows. For website setup and verification, follow the documentation guide.