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 usingspock_test
)
The easiest way to do so is to add the following to your WORKSPACE
file:
http_archive(
name = "io_bazel_rules_groovy",
url = "https://github.com/bazelbuild/rules_groovy/archive/0.0.4.tar.gz",
sha256 = "2677c74b68c0143adb42ea97aab0d7b22f0948805f38097bfb2060ef8f8be3df",
strip_prefix = "rules_groovy-0.0.4",
)
load("@io_bazel_rules_groovy//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("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_library")
groovy_library(
name = "groovylib",
srcs = glob(["*.groovy"]),
visibility = ["//visibility:public"],
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("@io_bazel_rules_groovy//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("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_binary")
groovy_binary(
name = "GroovyApp",
srcs = glob(["*.groovy"]),
main_class = "app.GroovyApp",
deps = [
"//src/main/groovy/lib:groovylib",
],
)
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("@io_bazel_rules_groovy//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 spock_test for wrappers that make testing with these systems slightly more convenient.
groovy_library(name, srcs, deps, **kwargs)
Attributes | |
---|---|
name |
Name, required
A unique name for this rule. |
srcs |
List of labels, required
List of .groovy source files used to build the library. |
deps |
List of labels or .jar files, optional
List of other libraries to be included on the compile-time classpath when building this library. These can be either other `groovy_library` targets, `java_library` targets, `groovy_and_java_library` targets, or raw .jar files. |
**kwargs |
see java_binary
The other arguments of this rule will be passed to the `java_import` that wraps the groovy library. |
groovy_and_java_library(name, srcs, deps, **kwargs)
Attributes | |
---|---|
name |
Name, required
A unique name for this rule. |
srcs |
List of labels, required
List of .groovy and .java source files used to build the library. |
deps |
List of labels or .jar files, optional
List of other libraries to be included on the compile-time classpath when building this library. These can be either other `groovy_library` targets, `java_library` targets, `groovy_and_java_library` targets, or raw .jar files. |
**kwargs |
see java_binary
The other arguments of this rule will be passed to the `java_import` that wraps the groovy library. |
groovy_binary(name, main_class, srcs, deps, **kwargs)
Attributes | |
---|---|
name |
Name, required
A unique name for this rule. |
main_class |
String, required
The name of either a class containing a `main` method or a Groovy script file to use as an entry point (see here for more details on scripts vs. classes). |
srcs |
List of labels, required
List of .groovy source files used to build the application. |
deps |
List of labels or .jar files, optional
List of other libraries to be included on both the compile-time classpath when building this application and the runtime classpath when executing it. These can be `groovy_library` targets, `java_library` targets, `groovy_and_java_library` targets, or raw .jar files. |
**kwargs |
see java_binary
The other arguments of this rule will be passed to the `java_binary` underlying the `groovy_binary`. |
groovy_test(name, deps, srcs, data, resources, jvm_flags, size, tags)
Attributes | |
---|---|
name |
Name, required
A unique name for this rule. |
srcs |
List of labels, required
List of .groovy source files whose names will be converted to classes passed to JUnitCore. |
deps |
List of labels or .jar files, optional
List of libraries to be included on both the compile-time classpath when building this test and on the runtime classpath when executing it. These can be `groovy_library` targets, `java_library` targets, `groovy_and_java_library` targets, or raw .jar files. |
resources |
List of labels, optional
A list of data files to include on the test's classpath. This is accomplished by creating a `java_library` containing only the specified resources and including that library in the test's dependencies. |
jvm_flags |
List of strings, optional
A list of flags to embed in the wrapper script generated for running this binary. |
groovy_junit_test(name, tests, deps, groovy_srcs, java_srcs, data, resources, jvm_flags, size, tags)
Attributes | |
---|---|
name |
Name, required
A unique name for this rule. |
tests |
List of labels, required
List of .groovy source files that will be used as test specifications that will be executed by JUnit. |
groovy_srcs |
List of labels, optional
List of additional .groovy source files that will be used to build the test. |
java_srcs |
List of labels, optional
List of additional .java source files that will be used to build the test. |
deps |
List of labels or .jar files, optional
List of libraries to be included on both the compile-time classpath when building this test and on the runtime classpath when executing it. These can be `groovy_library` targets, `java_library` targets, `groovy_and_java_library` targets, or raw .jar files. |
resources |
List of labels, optional
A list of data files to include on the test's classpath. This is accomplished by creating a `java_library` containing only the specified resources and including that library in the test's dependencies. |
jvm_flags |
List of strings, optional
A list of flags to embed in the wrapper script generated for running this binary. |
spock_test(name, specs, deps, groovy_srcs, java_srcs, data, resources, jvm_flags, size, tags)
Attributes | |
---|---|
name |
Name, required
A unique name for this rule. |
specs |
List of labels, required
List of .groovy source files that will be used as test specifications that will be executed by JUnit. |
groovy_srcs |
List of labels, optional
List of additional .groovy source files that will be used to build the test. |
java_srcs |
List of labels, optional
List of additional .java source files that will be used to build the test. |
deps |
List of labels or .jar files, optional
List of libraries to be included on both the compile-time classpath when building this test and on the runtime classpath when executing it. These can be `groovy_library` targets, `java_library` targets, `groovy_and_java_library` targets, or raw .jar files. |
resources |
List of labels, optional
A list of data files to include on the test's classpath. This is accomplished by creating a `java_library` containing only the specified resources and including that library in the test's dependencies. |
jvm_flags |
List of strings, optional
A list of flags to embed in the wrapper script generated for running this binary. |