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("/tools/build_defs/groovy/groovy", "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("/tools/build_defs/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_defs/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_defs/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"], )
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)