Warning
Due to an absence of any maintainers, this repository is archived and currently unmaintained.
We discourage any new dependencies on the contents of this repository.
If you, or your organization, are interested in revitalizing this project by taking over its maintenance, we welcome your initiative.
To discuss the process of un-archiving and assuming ownership of this repository, please reach out to us via email at [email protected]
or join the conversation on our Slack workspace in the #rules
channel.
You can sign up for Slack access at https://slack.bazel.build.
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:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "io_bazel_rules_groovy",
url = "https://github.com/bazelbuild/rules_groovy/archive/0.0.6.tar.gz",
sha256 = "21c7172786623f280402d3b3a2fc92f36568afad5a4f6f5ea38fd1c6897aecf8",
strip_prefix = "rules_groovy-0.0.6",
)
load("@io_bazel_rules_groovy//groovy:repositories.bzl", "rules_groovy_dependencies")
rules_groovy_dependencies()
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. |