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: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.
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"], )
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_binary(name, main_class, srcs, deps, **kwargs)