Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/bazelbuild/rules_groovy

Groovy rules for Bazel
https://github.com/bazelbuild/rules_groovy

bazel bazel-rules groovy

Last synced: 1 day ago
JSON representation

Groovy rules for Bazel

Lists

README

        

[![Build status](https://badge.buildkite.com/5745498acd50b9811f2bdb2fc26defd3c3f01bed96ffe6fb5a.svg)](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 `[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](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.





## groovy\_and\_java\_library

```python
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

```python
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

```python
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

```python
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

```python
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.