Skip to main content
Building from source is useful when you want to run the latest unreleased changes, contribute a fix, or embed a custom format plug-in. The build is driven by Apache Maven and produces all three kinds of artifacts — the desktop viewer, the web server, and the standalone format JARs — in a single command.

Prerequisites

Before you build, make sure the following are available on your machine:
JDK 25 or higher is required to build from source. The root pom.xml sets maven.compiler.release=25 and the Maven Enforcer plugin enforces requireJavaVersion >= 25, so older JDKs will fail at the validate phase. A JDK 11 runtime is sufficient to run the pre-built viewer or web server JARs, but not to compile them.
Maven 3.9 or higher is required. The Maven Enforcer plugin in the root pom.xml declares [3.9.0,) as the required version range, so older versions will fail at the validate phase.
Verify both tools are on your PATH:

macOS Extra Dependencies

On macOS the build script uses GNU coreutils, GNU parallel, and Graphviz. Install them with Homebrew before running the build:

Build Steps

Version Numbering

Binary Internals uses Maven CI Friendly Versions. The root pom.xml declares <revision>3.7</revision> in its <properties> block, and every child module references that value as ${revision}. This means you can override the version at build time without editing any POM file: mvn clean install -Drevision=3.8-SNAPSHOT.
The flatten-maven-plugin resolves ${revision} before installing or deploying, so the published POM files in your local Maven repository contain the literal version string rather than the placeholder.

Running Maven Directly

If you prefer to invoke Maven without the build script (for example, to skip the Javadoc and graph steps), use:
To skip tests and downgrade static-analysis failures to warnings during a quick iteration:
These are the override properties configured in the root pom.xml. -DskipTests is the standard Maven Surefire flag; -Dcheckstyle.failOnViolation=false and -Dspotbugs.failOnError=false downgrade those checks from build-breaking errors to warnings rather than skipping them entirely.