# rules_groovy **Repository Path**: mirrors_bazelbuild/rules_groovy ## Basic Information - **Project Name**: rules_groovy - **Description**: Groovy rules for Bazel - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2025-10-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [](https://buildkite.com/bazel/rules-groovy-postsubmit) # 📣 [Unmaintained] Groovy Rules > [!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 `bazel-contrib@googlegroups.com` or join the conversation on our Slack workspace in the `#rules` channel. > You can sign up for Slack access at [https://slack.bazel.build](https://slack.bazel.build).
## Overview These build rules are used for building [Groovy](http://www.groovy-lang.org/) projects with Bazel. Groovy libraries may interoperate with and depend on Java libraries and vice-versa. ## Setup 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](http://www.groovy-lang.org/download.html) * `//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: ```python 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() ``` ## Basic Example 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: ```python 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: ```python 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: ```python 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: ```python 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 ```python 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. |
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. |
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`. |
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. |
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. |
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. |