gradle-build
Guides understanding and using the Gradle build system in Apache Beam. Use when building projects, understanding dependencies, or troubleshooting build issues.
- License 许可
- Apache-2.0
- 所属仓库
- apache/beam
- 最近更新
- 2026-11-11
- Stars
- ★ 8.7k
- Forks
- 4.8k
01 前言 Front Matter
- name
- gradle-build
- description
- Guides understanding and using the Gradle build system in Apache Beam. Use when building projects, understanding dependencies, or troubleshooting build issues.
03 SKILL.md 正文
Gradle Build System in Apache Beam
Overview
Apache Beam is a mono-repo using Gradle as its build system. The entire project (Java, Python, Go, website) is managed as a single Gradle project.
Key Files
build.gradle.kts- Root build configurationsettings.gradle.kts- Project structure and module definitionsgradle.properties- Global properties and versionsbuildSrc/- Custom Gradle plugins including BeamModulePlugin
BeamModulePlugin
Located at buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
Purpose
- Manages Java dependencies centrally
- Configures project types (Java, Python, Go, Proto, Docker, etc.)
- Defines common custom tasks
Java Project Configuration
apply plugin: 'org.apache.beam.module'
applyJavaNature(
automaticModuleName: 'org.apache.beam.sdk.io.kafka'
)
Common Commands
Build
# Build entire project
./gradlew build
# Build specific project
./gradlew :sdks:java:core:build
./gradlew -p sdks/java/core build
# Compile only (no tests)
./gradlew :sdks:java:core:compileJava
Test
# Run tests
./gradlew :sdks:java:core:test
# Run specific test
./gradlew :sdks:java:core:test --tests *MyTest
# Skip tests
./gradlew build -x test
Clean
# Clean specific project
./gradlew :sdks:java:core:clean
# Clean everything
./gradlew clean
Formatting
# Java formatting (Spotless)
./gradlew spotlessApply
# Check formatting
./gradlew spotlessCheck
# Format and validate CHANGES.md
./gradlew formatChanges
./gradlew validateChanges
Publishing
# Publish to Maven Local
./gradlew -Ppublishing :sdks:java:core:publishToMavenLocal
# Publish all Java artifacts
./gradlew -Ppublishing publishToMavenLocal
Pre-commit Tasks
Java
./gradlew javaPreCommit
Python
./gradlew pythonPreCommit
Combined
./gradlew :checkSetup # Validates Go, Java, Python environments
Useful Flags
| Flag | Description |
|---|---|
-p <path> |
Run task in specific project directory |
-x <task> |
Exclude task |
--tests <pattern> |
Filter tests |
-Ppublishing |
Enable publishing tasks |
-PdisableSpotlessCheck=true |
Disable formatting check |
-PdisableCheckStyle=true |
Disable checkstyle |
-PskipCheckerFramework |
Skip Checker Framework |
--continue |
Continue after failures |
--info |
Verbose output |
--debug |
Debug output |
--scan |
Generate build scan |
--parallel |
Parallel execution |
GCP-related Properties
-PgcpProject=my-project
-PgcpRegion=us-central1
-PgcpTempRoot=gs://bucket/temp
-PgcsTempRoot=gs://bucket/temp
Docker Tasks
# Build Java SDK container
./gradlew :sdks:java:container:java11:docker
# Build Python SDK container
./gradlew :sdks:python:container:py312:docker
# Build and push a container into a custom repository
./gradlew :sdks:java:container:java11:docker \
-Pdocker-repository-root=gcr.io/project \
-Pdocker-tag=custom \
-Ppush-containers
If a :docker task produces logs that contain the following:
WARNING: No output specified with docker-container driver.
Build result will only remain in the build cache.
then you must use -PuseDockerBuildx when running :docker tasks
in this environment. For example:
# Build and push a go container into a custom repository
./gradlew :sdks:go:container:docker \
-Pdocker-repository-root=gcr.io/project \
-Pdocker-tag=custom \
-Ppush-containers \
-PuseDockerBuildx
Dependency Management
View Dependencies
./gradlew :sdks:java:core:dependencies
./gradlew :sdks:java:core:dependencies --configuration runtimeClasspath
Force Dependency Version
In build.gradle:
configurations.all {
resolutionStrategy.force 'com.google.guava:guava:32.0.0-jre'
}
Troubleshooting
Clean Gradle Cache
rm -rf ~/.gradle/caches
rm -rf .gradle
rm -rf build
Common Errors
NoClassDefFoundError
- Run
./gradlew clean - Delete gradle cache
Proto-related Errors
- Regenerate protos:
./gradlew generateProtos
Dependency Conflicts
- Check dependencies:
./gradlew dependencies - Use
--scanfor detailed analysis
Useful Tasks
# List all tasks
./gradlew tasks
# List tasks for a project
./gradlew :sdks:java:core:tasks
# Show project structure
./gradlew projects
IDE Integration
IntelliJ
- Open repository root as Gradle project
- Wait for indexing
- Gradle tool window shows all tasks
VS Code
Install Gradle extension for task discovery
04 同仓库更多 Skills
yaml-development
Guides YAML SDK development in Apache Beam, including environment setup, testing, and key concepts. Use when working with Beam YAML code in sdks/python/apache_beam/yaml/.
runners
Guides understanding and working with Apache Beam runners (Direct, Dataflow, Flink, Spark, etc.). Use when configuring pipelines for different execution environments or debugging runner-specific issues.
python-development
Guides Python SDK development in Apache Beam, including environment setup, testing, building, and running pipelines. Use when working with Python code in sdks/python/.
license-compliance
Ensures all new files include proper Apache 2.0 license headers. Use when creating any new file in the Apache Beam repository.
java-development
Guides Java SDK development in Apache Beam, including building, testing, running examples, and understanding the project structure. Use when working with Java code in sdks/java/, runners/, or examples/java/.
io-connectors
Guides development and usage of I/O connectors in Apache Beam. Use when working with I/O connectors, creating new connectors, or debugging data source/sink issues.