Development#

Working on the connectors themselves, rather than using them in a job. This page covers the toolchain and the build.

TestingThe three test kinds and how to run each
ChecksThe repository-specific checkers CI runs, and the skills that answer their failures
ContributingThe issue-first process, pull-request expectations, licensing, and design records

Toolchain#

  • JDK 17 or 21. The build targets bytecode 17; Java 11 is not supported — see Supported versions.
  • Maven, through the included wrapper ./mvnw.
  • just as the command entrypoint and mise to install the tools the recipes need — mise install in the repository root installs everything mise.toml pins. In a shell without mise activated, mise x -- just <recipe> behaves the same.
  • Python 3.11 or newer, for the repository’s checker scripts that wrap the build. mise installs its pinned 3.12.
  • Docker, for the emulator-backed integration tests that run inside the ordinary build.

The justfile is the command index, and CI calls the same recipes, so what runs locally is what runs there. just --list prints every recipe with a one-line description; this section names only the handful most changes need, so it stays true when recipes are added.

Building#

The full build — formatting and license checks, unit tests, integration tests, packaging:

just verify

It needs Docker but no Google Cloud credentials. The recipe is a strict header check followed by ./mvnw verify, and CI’s build lanes run the same recipe — though CI also runs the checker suite alongside it, so a green local build is necessary rather than sufficient. Two narrower forms serve day-to-day work:

just verify-module flink-connector-gcp-bigquery   # one module and what it is built on
just verify-flink 1.20.4                          # the full build against another Flink version

One source tree supports Flink 2.x and 1.20 together: the few API differences between the majors live in per-major source roots (src/main/java-flink1 / src/main/java-flink2) selected by the flink.compat Maven property, whose comment in the root pom.xml documents the mechanism. just verify-flink selects the seam along with the version, which is the flag most easily forgotten in a raw Maven call. Supported versions states the user-facing contract and how the weekly build verifies the range.

Run just format before committing — CI fails on unformatted code. Format under a JDK 17: the inherited build skips Spotless on Java 21 (google-java-format does not run there), so on a 21-only toolchain both just format and just verify pass with unformatted Java and the JDK 17 CI lane fails it.

Working in an IDE#

Import the root pom.xml as a Maven project on a JDK 17. Nothing else is required: the formatter is Spotless, applied by just format and enforced by the JDK 17 build, so an IDE formatter profile is a convenience rather than a correctness requirement; Checkstyle also runs in the build, and an IDE plugin can point at its configuration in tools/maven/checkstyle.xml to surface violations while editing.