Java
The Java package reads the same .tdc config and, for the same seed, produces the
same output as the TypeScript, Python, C# and Rust implementations — the same
cross-language guarantee.
Getting it
One dependency, from Maven Central:
<dependency>
<groupId>io.github.nickliapin</groupId>
<artifactId>tdcv2</artifactId>
<version>0.3.2</version>
</dependency>
Gradle, in build.gradle.kts:
implementation("io.github.nickliapin:tdcv2:0.3.2")
Maven Central caps how many releases it accepts from a project each month, and this project reaches that cap. When it does, the jar stays where it is while npm, PyPI, NuGet and crates.io move on, until the allowance resets and the backlog goes out together.
The coordinate above is always the newest jar that is actually on Central, so it resolves — it is simply not always the newest TDC. When it is behind, what you are missing is the engine changes made since; the config language, the diagnostics and the output of everything older are unchanged, so a config written for this jar keeps working.
The starter data packs travel inside the jar, so this runs with nothing else installed.
See Installation for the whole picture, including
the separate CLI jar — Maven has no equivalent of npm's bin, so the command line ships
as its own self-contained artifact.
Using it
var data = new TDC("users.tdc");
System.out.println(data.toString());
for (var row : data.iterate()) {
System.out.println(row.get("Gender"));
}
The method names mirror the TypeScript API — see the same names everywhere for the table, which the test suites check rather than merely assert.
One value, without a config
Quick draws a single value from the same data packs a config reads — no file, no
<env>, one call:
import io.github.nickliapin.tdc.quick.Quick;
Quick tdc = Quick.tdc();
tdc.get("person.lastName"); // Jones
tdc.get("usa.docs.ssn"); // 699209702, with its real check digits
tdc.many("person.lastName", 5); // five of them
Quick.seeded("demo").locale("ru").get("person.lastName"); // pinned and in Russian
The address is a string here, where TypeScript, Python and C# walk it as members.
The member shape needs one generated method per address, and a generated surface
could only cover the packs inside the jar — while most packs arrive at run time,
and get("ru.person.lastName") works the moment the download finishes. One value
at a time is the whole surface.