tree: 6f1d938b9e03bfd920b95b54deefb4453052c919 [path history] [tgz]
  1. groovy.bzl
  2. README.md
tools/build_defs/groovy/README.md

Groovy Rules

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:groovy, pointing at the Groovy core language jar
  • //external:junit, pointing at JUnit (only required if using the test rules)
  • //external:spock, pointing at Spock (only required if using spock_test)

The easiest way to do so is to add the following to your WORKSPACE file and putting groovy.BUILD at the root of your workspace:

load("@bazel_tools//tools:build_defs/groovy/groovy.bzl", "groovy_repositories")

groovy_repositories()

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("@bazel_tools//tools:build_defs/groovy/groovy.bzl", "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("@bazel_tools//tools:build_defs/groovy/groovy.bzl", "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("@bazel_tools//tools:build_defs/groovy/groovy.bzl", "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("@bazel_tools//tools:build_defs/groovy/groovy.bzl", "groovy_test", "groovy_library")


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

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

If you're using JUnit or Spock, see groovy_junit_test or <a href="#spock_test>spock_test for wrappers that make testing with these systems slightly more convenient.

groovy_library

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

groovy_and_java_library

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)

groovy_junit_test

groovy_junit_test(name, tests, deps, groovy_srcs, java_srcs, data, resources, jvm_flags, size, tags)

spock_test

spock_test(name, specs, deps, groovy_srcs, java_srcs, data, resources, jvm_flags, size, tags)