Giter Club home page Giter Club logo

rules_groovy's Introduction

Build status

Groovy Rules

Overview

These build rules are used for building Groovy 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
  • //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:

http_archive(
    name = "io_bazel_rules_groovy",
    url = "https://github.com/bazelbuild/rules_groovy/archive/0.0.3.tar.gz",
    sha256 = "3194a45a6c3d2947380efb08e2fa5634c67eafa215368f4258ae60381f05dea5",
    strip_prefix = "rules_groovy-0.0.3",
)
load("@io_bazel_rules_groovy//groovy:groovy.bzl", "groovy_repositories")
groovy_repositories()

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:

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

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

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

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

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

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

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.

rules_groovy's People

Contributors

buchgr avatar damienmg avatar davidzchen avatar dslomov avatar ekuefler avatar greggdonovan avatar hlopko avatar jart avatar kchodorow avatar meteorcloudy avatar nlopezgi avatar philwo avatar robbiemc avatar vladmos avatar xingao267 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.