Skip to content

Java Service

Java

  • Build: Maven, run through make like every other language.
  • Tests: JUnit; acceptance scenarios run with Cucumber from test/bdd/features/.
  • Lint: Checkstyle; ArchUnit enforces the dependency direction app → infra → usecase → domain in make arch-test.
  • Rationale: Maven is the build tool most Java developers know, and its standard layout needs no configuration.

Service

  • Structure: layers app, infra, usecase, and domain; a health endpoint exercised by liveness.feature; a domain model in specs/functional_design/domain_model.md.
  • Container image: built, scanned, and pushed in three jobs, handing the image over as an archive, so a vulnerability scan can stop an image before it reaches the registry. The runtime image is distroless: no shell and no package manager in production; a debug image adds investigation tools.
  • Release: a release tag re-tags the image built and tested at merge to main; it is never rebuilt.
  • Rationale: configuration comes from environment variables, so the same image runs in every environment.