Migrate a Gradle Project
This tutorial walks through migrating a Gradle Java/Kotlin project to Bazel.
What You’ll Learn
Section titled “What You’ll Learn”- How to analyze a Gradle project
- How to handle multi-module projects
- How to map Gradle dependencies to Bazel
Prerequisites
Section titled “Prerequisites”- A Gradle project with
build.gradleorbuild.gradle.kts - Bazel 9.x installed
- rebaze binary
Project Structure
Section titled “Project Structure”Consider a typical Gradle project:
Directorymyapp/
- build.gradle.kts
- settings.gradle.kts
Directoryapp/
- build.gradle.kts
- src/main/java/…
Directorylib/
- build.gradle.kts
- src/main/java/…
With settings.gradle.kts:
rootProject.name = "myapp"include("app", "lib")-
Analyze the project
Terminal window rebaze analyze myapp/Output:
Detected build systems: gradle -
Preview the migration
Terminal window rebaze migrate myapp/ --dry-runShows generated files:
MODULE.bazel module(name = "myapp", version = "0.1.0")bazel_dep(name = "rules_java", version = "...")app/BUILD.bazel java_binary(name = "app",srcs = glob(["src/main/java/**/*.java"]),deps = ["//lib"],)lib/BUILD.bazel java_library(name = "lib",srcs = glob(["src/main/java/**/*.java"]),visibility = ["//visibility:public"],) -
Run the migration
Terminal window rebaze migrate myapp/ -
Validate
Terminal window rebaze validate myapp/Or:
Terminal window cd myappbazel build //...bazel test //...
External Dependencies
Section titled “External Dependencies”Gradle dependencies are mapped to rules_jvm_external:
dependencies { implementation("com.google.guava:guava:32.1.3-jre") testImplementation("junit:junit:4.13.2")}Generates:
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")maven.install( artifacts = [ "com.google.guava:guava:32.1.3-jre", "junit:junit:4.13.2", ],)use_repo(maven, "maven")java_library( name = "lib", srcs = glob(["src/main/java/**/*.java"]), deps = ["@maven//:com_google_guava_guava"],)Gradle to Bazel Mapping
Section titled “Gradle to Bazel Mapping”| Gradle | Bazel |
|---|---|
implementation | deps |
api | deps + exports |
testImplementation | test target deps |
compileOnly | neverlink = True |
runtimeOnly | runtime_deps |
Current Limitations
Section titled “Current Limitations”Next Steps
Section titled “Next Steps”- CLI Reference - All migration options
- Dependency Strategies - Resolution options