- Multi-module Gradle build. Core modules live at the repo root:
objectbox-java-api,objectbox-java,objectbox-kotlin,objectbox-rxjava,objectbox-rxjava3, andobjectbox-android. objectbox-androidrequires the Android SDK; exclude it with-PexcludeAndroid=trueif the SDK is unavailable.- Test modules live under
tests/, notablytests/objectbox-java-testandtests/test-proguard. - Shared build logic (e.g., publishing conventions) lives in the
build-logic/included build. - Source follows standard Gradle layout per module (e.g.,
src/main/java,src/main/kotlin,src/test/java). - CI config:
.gitlab-ci.yml(primary; Jenkins is obsolete); helper scripts live inscripts/; build outputs go tobuild/.
./gradlew clean build— full build across modules../gradlew :objectbox-java:build— build a single module../gradlew :tests:objectbox-java-test:test— run the main test suite../gradlew :tests:objectbox-java-test:test --tests io.objectbox.query.QueryTest— run a single test class../gradlew -version— verify Gradle/JDK setup../scripts/test-with-asan.sh --stacktrace clean build— CI-style run with ASAN (requires native deps; currently disabled in CI, see issue #273).
- No repo-wide formatter config is present; follow existing Java/Kotlin style in the touched files and keep changes minimal.
- Use 4-space indentation and standard Java/Kotlin naming conventions; prefer package naming under
io.objectbox. - New tests in
tests/objectbox-java-testshould name methods as{attribute}_{queryCondition}_{expectation}(seetests/README.md).
- Tests are JUnit-based (see
tests/objectbox-java-test/build.gradle.kts). - Tests run against the real native database library (
io.objectbox:objectbox-linux/-macos/-windowsfrom Maven). Snapshot versions of these resolve only via the internal GitLab repository (gitlabUrl/gitlabPrivateTokenGradle properties, seesettings.gradle.kts). - Place new tests under
tests/objectbox-java-test/src/test/java(or Kotlin equivalents). - Legacy tests may still use the
test*prefix; new tests should follow the naming convention above.
- Core API:
io.objectbox.BoxStore,io.objectbox.Box, andio.objectbox.Transaction(seetests/objectbox-java-test/src/test/java/io/objectbox/BoxStoreTest.javaandtests/objectbox-java-test/src/test/java/io/objectbox/BoxTest.java). - Queries:
io.objectbox.query.Query,QueryBuilder, andQueryCondition(seetests/objectbox-java-test/src/test/java/io/objectbox/query/QueryTest.javaandtests/objectbox-java-test/src/test/java/io/objectbox/query/QueryTest2.java). - Relations:
io.objectbox.relation.ToOneandToMany(seetests/objectbox-java-test/src/test/java/io/objectbox/relation/RelationTest.java). - Sync:
io.objectbox.sync.SyncClient,SyncServer, andSyncCredentials(seetests/objectbox-java-test/src/test/java/io/objectbox/sync/SyncTest.java).
- The default branch for development and PRs is
dev; thepublishbranch is used for releases to Maven Central. - Recent history uses a short area prefix, e.g.,
QueryTest: use new API...orTargetIdProperty: improve.... Follow this pattern for new commits. - Add user-facing changes to the "Next release" section of
CHANGELOG.md. - PRs should include a concise summary, rationale, and the exact test commands run.
- If changes affect native or CI behavior, call that out explicitly (CI tests against the oldest supported JDK 8 and a recent JDK, see
.gitlab-ci.yml).