- Use the Gradle Wrapper (`./gradlew`) for all builds — commit `gradlew`, `gradlew.bat`, and `gradle/wrapper/gradle-wrapper.properties` to version control.
- Define dependencies in `build.gradle` using the `implementation`, `testImplementation`, and `runtimeOnly` configurations — avoid the deprecated `compile` configuration.
- Use `./gradlew dependencies` to inspect the resolved dependency tree and identify version conflicts before they cause runtime issues.
- Centralize dependency versions in `gradle/libs.versions.toml` (version catalog) to keep all module versions in one place.
- Use `./gradlew build --scan` to publish a build scan to Gradle's service for detailed performance and dependency analysis.
- Apply the `java-library` plugin instead of `java` when building libraries — use `api` for dependencies that are part of your public API and `implementation` for internal ones.
- Use `tasks.withType(JavaCompile).configureEach { options.release = 17 }` to set the Java release version consistently across all compile tasks.