Skip to main content

Java SDK

RBS provides comprehensive Java support with automatic JDK management, Maven-compatible dependency resolution, JUnit 5 auto-inclusion, Spring Boot support, linting, and container image building.

Setup

Toolchain

Register a Java toolchain in WORKSPACE.rbs. RBS automatically downloads the JDK.
load("@rbs//java/toolchain.rbs", "java_toolchain", "java_test_deps")

# Auto-downloads JDK 17
java_toolchain(name = "java", version = "17.0.11")

# Auto-installs JUnit 5 for tests
java_test_deps()

Dependencies

Define external Java packages using java_repository. Supports Maven coordinates.
load("@rbs//java/dependencies.rbs", "java_repository")

java_repository(
    name = "spring_boot_web",
    package = "org.springframework.boot:spring-boot-starter-web",
    version = "3.2.2",
)

Rules

java_library

Creates a reusable Java library (JAR).
load("@rbs//java/rules.rbs", "java_library")

java_library(
    name = "springboot_lib",
    srcs = [
        "src/main/java/com/example/springboot/Application.java",
        "src/main/java/com/example/springboot/GreetingService.java",
        "src/main/java/com/example/springboot/Calculator.java",
    ],
    deps = [
        "@external://org_springframework_boot_spring_boot_starter_web:3.2.2",
    ],
)
AttributeTypeDescription
namestringUnique target name (required).
srcslistJava source files.
depslistDependencies (local or @external://).
resourceslistResource files to include in the JAR.

java_binary

Creates an executable Java application.
load("@rbs//java/rules.rbs", "java_binary")

java_binary(
    name = "app",
    srcs = glob(["src/main/java/**/*.java"]),
    main = "com.example.springboot.Application",
    resources = ["src/main/resources/application.properties"],
    deps = [
        "@external://org_springframework_boot_spring_boot_starter_web:3.2.2",
    ],
    javaopts = ["-Djava.awt.headless=true", "-Xmx512m"],
)
AttributeTypeDescription
namestringUnique target name (required).
srcslistJava source files.
mainstringFully qualified main class (required).
depslistDependencies.
resourceslistResource files (e.g., application.properties).
javaoptslistJVM options.

java_test

Runs Java tests. JUnit 5 is automatically included — no manual dependency required.
load("@rbs//java/rules.rbs", "java_test")

# Unit test — just depend on the code being tested
java_test(
    name = "greeting_service_test",
    srcs = [
        "src/main/java/com/example/springboot/GreetingService.java",
        "src/test/java/com/example/springboot/GreetingServiceTest.java",
    ],
    deps = [
        "@external://org_springframework_boot_spring_boot_starter_web:3.2.2",
    ],
    args = ["--select-class=com.example.springboot.GreetingServiceTest"],
)

# Full test suite
java_test(
    name = "all_tests",
    srcs = glob(["src/main/java/**/*.java", "src/test/java/**/*.java"]),
    deps = [
        "@external://org_springframework_boot_spring_boot_starter_web:3.2.2",
    ],
    args = [
        "--select-package=com.example.springboot",
        "--include-classname=.*Test",
    ],
)
AttributeTypeDescription
namestringUnique target name (required).
srcslistTest and source files.
depslistDependencies.
argslistJUnit 5 console launcher arguments.

java_lint

Runs static analysis on Java source files.
load("@rbs//java/rules.rbs", "java_lint")

java_lint(
    name = "app_lint",
    srcs = glob(["src/main/java/**/*.java"]),
)

Example: Spring Boot Application

load("@rbs//java/toolchain.rbs", "java_toolchain", "java_test_deps")
load("@rbs//java/dependencies.rbs", "java_repository")

java_toolchain(name = "java", version = "17.0.11")
java_test_deps()

java_repository(
    name = "spring_boot_web",
    package = "org.springframework.boot:spring-boot-starter-web",
    version = "3.2.2",
)