- Java SDK 17 or 21 (OpenJDK recommended) — CI builds with both — and Git
- Docker — not strictly required, but needed by some integration tests (Testcontainers-based); those tests can be skipped
- For GraalVM native image builds, follow the Quarkus guide; on macOS, see DEVELOP_ON_MACOS.md
Build with Maven from the root:
mvn clean installA full build with all tests takes a long time. Common ways to shorten the cycle:
| Flag | Effect |
|---|---|
-DskipTests |
Skip unit and integration tests |
-DquickTests |
Formatting validation and unit tests only (skips invoker and archetype tests) |
-DskipITs |
Skip integration tests only (failsafe) |
-Dinvoker.skip=true |
Skip maven-invoker-based integration tests (e.g. in kie-maven-plugin) |
-Dquickly |
Skip most plugins and tests |
-Dfull |
Also build distribution modules (fullProfile) |
You can also build only the module you work on, plus what depends on it, with
standard Maven reactor flags (-pl <module> -am / -amd).
- Unit tests run with surefire; integration tests run with failsafe and are
named with a trailing
IT(e.g.SomethingIT.java). - Some tests assume an
en_USlocale. On machines with a different locale, activate thetest-enprofile:-Ptest-enor-DTestEn. - Test coverage (Jacoco):
mvn clean verify -Ptest-coverage, report undertarget/site/jacoco/. - Quarkus modules:
@QuarkusTestclasses are unit tests (surefire),@QuarkusIntegrationTestclasses are integration tests (failsafe,*IT.java). The two cannot be mixed in the sameintegration-testphase. - Maven-invoker-based integration tests (which build real kjars with the KIE
Maven plugin) support running a subset with
-Dinvoker.test=<pattern>; their build logs land undertarget/it/<module_name>/build.log.
UnmappableCharacterExceptionduring the build: setMAVEN_OPTS=-Dfile.encoding=UTF-8(as an environment variable, not amvnargument) and rebuild.- Testcontainers fails with "Can not connect to Ryuk at localhost" (seen
with some Docker for Mac versions, or when privileged containers are not
allowed): try
export TESTCONTAINERS_RYUK_DISABLED=true. - Locale-dependent test failures: use the
test-enprofile described above.