eXist-db itself is written in and qualified with Java 21. The build system is Apache Maven. If you're not familiar with Git, we recommend this excellent online interactive tutorial.
To build eXist-db:
- Checkout the Git Repository
- Execute a Maven to compile eXist-db
$ git clone https://github.com/eXist-db/exist.git
$ cd exist
$ git checkout master
$ mvn -DskipTests packageFrom here, you now have a compiled version of eXist-db in the exist-distribution/target folder that you may use just as you would an installed version of eXist-db. An installer is also build and present in exist-installer/target for easy installation elsewhere.
Useful build switches:
-Ddocker=true: builds the docker image-DskipTests: skips running all tests-DskipUnitTests=true: run only integration tests-Ddependency-check.skip=true: skips validating dependencies
Maven resolves dependencies from these repositories (defined in exist-parent/pom.xml):
- Releases: Maven Central (direct) → exist-db proxy → exist-db → evolved-binary (all public)
- Snapshots: GitHub Packages (exist, exist-xqts-runner) → exist-db-snapshots → evolved-binary-snapshots
When building from develop (or any SNAPSHOT version), Maven resolves exist-xqts-runner from https://maven.pkg.github.com/eXist-db/exist-xqts-runner. GitHub Packages requires authentication; without it you get 401 Unauthorized.
Option 1 – Exclude XQTS (no auth needed): use mvn -DskipTests package -pl '!exist-xqts' to skip the XQTS module.
Option 2 – Configure GitHub auth (if you need XQTS or a full build): add a GitHub PAT to ~/.m2/settings.xml as server github-xqts-runner (and optionally github for eXist snapshots). See .github/actions/maven-github-settings/action.yml for the expected <server> format.
Further build options can be found at: eXist-db Build Documentation and on the workflow files of this repo.
From the repo root:
- All tests:
mvn -V -B verify -Ddependency-check.skip -Dlicense.skip - exist-core only: add
--projects exist-core --also-maketo the above - Single test class:
mvn -Dtest=fully.qualified.TestClass test --projects exist-core --also-make
NOTE:
In the above example, we switched the current (checked-out) branch from develop to master. We use the GitFlow for eXist-db process:
developis the current (and stable) work-in-progress (the next release)masteris the latest release The choice of which to use is up to you.