tree: 5baddd032faa5155b2a6a9a17fb900a1a38b927a [path history] [tgz]
  1. groovy.BUILD
  2. groovy.bzl
  3. groovy.WORKSPACE
  4. README.md
tools/build_defs/groovy/README.md

Groovy Rules for Bazel

Overview

These build rules are used for building Groovy projects with Bazel. Groovy libraries may interoperate with and depend on Java libraries and vice-versa.

Setup

To be able to use the Groovy rules, you must provide bindings for the following targets:

  • //external:groovy-sdk, pointing at the Groovy SDK binaries
  • //external:junit, pointing at JUnit (only required if using groovy_test)

The easiest way to do so is by copying the content of groovy.WORKSPACE to your workspace file and putting groovy.BUILD at the root of your workspace.

Basic Example

Suppose you have the following directory structure for a simple Groovy and Java application:

[workspace]/
    WORKSPACE
    src/main/groovy/
        app/
            BUILD
            GroovyApp.groovy
        lib/
            BUILD
            GroovyLib.groovy
            JavaLib.java
    src/test/groovy/
        lib/
            BUILD
            LibTest.groovy

Then, to build the code under src/main/groovy/lib/, your src/main/groovy/lib/BUILD can look like this:

load("/tools/build_rules/groovy/groovy", "groovy_library")

groovy_library(
    name = "groovylib",
    srcs = glob(["*.groovy"]),
    deps = [
        ":javalib",
    ],
)

java_library(
    name = "javalib",
    srcs = glob(["*.java"]),
)

For simplicity, you can combine Groovy and Java sources into a single library using groovy_and_java_library. Note that this allows the Groovy code to reference the Java code, but not vice-versa. Your src/main/groovy/lib/BUILD file would then look like this:

load("/tools/build_rules/groovy/groovy", "groovy_and_java_library")

groovy_and_java_library(
    name = "lib",
    srcs = glob(["*.groovy", "*.java"]),
)

To build the application under src/main/groovy/app, you can define a binary using groovy_binary as follows:

load("/tools/build_rules/groovy/groovy", "groovy_binary")

groovy_binary(
    name = "GroovyApp",
    srcs = glob(["*.groovy"]),
    main_class = "GroovyApp",
    deps = [
         "//src/main/groovy/lib",
    ],
)

Finally, you can write tests in Groovy using groovy_test. The srcs of this rule will be converted into names of class files that are passed to JUnit. For this to work, the test sources must be under src/test/groovy or src/test/java. To build the test under src/test/groovy/lib, your BUILD file would look like this:

load("/tools/build_defs/groovy/groovy", "groovy_test", "groovy_library")


groovy_library(
  name = "testlib",
  srcs = glob(["*.groovy"]),
)

groovy_test(
  name = "LibTest",
  srcs = ["LibTest.groovy"],
  deps = [":testlib"],
)

Build Rule Reference [reference]

groovy_library

groovy_library(name, srcs, deps, **kwargs)

groovy_and_java_library(name, srcs, deps, **kwargs)

groovy_binary

groovy_binary(name, main_class, srcs, deps, **kwargs)

groovy_test

groovy_test(name, deps, srcs, data, resources, jvm_flags, size, tags)