These build rules are used for building Groovy projects with Bazel. Groovy libraries may interoperate with and depend on Java libraries and vice-versa.
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()
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(name, srcs, deps, **kwargs)
groovy_and_java_library(name, srcs, deps, **kwargs)
groovy_binary(name, main_class, srcs, deps, **kwargs)
groovy_test(name, deps, srcs, data, resources, jvm_flags, size, tags)
groovy_junit_test(name, tests, deps, groovy_srcs, java_srcs, data, resources, jvm_flags, size, tags)
spock_test(name, specs, deps, groovy_srcs, java_srcs, data, resources, jvm_flags, size, tags)