Nebula Plugin Overview
As was stated earlier, Nebula is composed of a number of Gradle plugins, each serving a unique purpose. There are however logical groupings to some of the plugins. The categories
- Java dependency management
- OS packaging
- Release management
- Miscellaneous
- Core plugins
- Deprecated / Maintenance mode
Java dependency management
Gradle provides a substantial dependency management facility, but we have found these capabilities insufficient for the needs of Netflix engineers. As we result, we have built a few plugins that extend Gradle dependency management capabilities.
gradle-dependency-lock-plugin
The goal of the gradle-dependency-lock-plugin is to ensure builds are repeatable over time, by locking the complete transitive dependency graph into a single source file. This particular plugin is useful for:
- allowing repeatable builds of old versions of the code
- controlling dependency updates when volatile libraries
Check out the gradle-dependency-lock-plugin GitHub page for details on how to use it.
nebula-dependency-recommender-plugin
The goal of the nebula-dependency-recommender-plugin is to make it easier to produce and consume a Maven BOM file. This plugin allows library producers to publish a single BOM file that defines a graph of dependency versions that all work together. This plugin also allows library consumers to defer the specification of specific dependency versions to an authoritative BOM producer.
Check out the nebula-dependency-recommender-plugin GitHub page for details on how to use it.
gradle-resolution-rules-plugin
The goal of the gradle-resolution-rules-plugin is provide a mechanism to share dependency rules for all Gradle builds within an entire organization. The rules can be packaged and published using the nebula.resolution-rules-producer sub-plugin. The rules can be consumed and applied using the nebula.resolution-rules sub-plugin.
Check out the gradle-resolution-rules-plugin GitHub page for details on how to use it.
OS Packaging
All deployments at Netflix are conducted via what we call a “bake”. A bake is the process of taking a base Amazon Machine Image (BaseAMI) and installing the application via its Debian package. This enables us to easily conform to the Immutable Server pattern. Nebula provides a few plugins to help with this process.
gradle-ospackage-plugin
The goal of this plugin is to produce a system package, typically an RPM or Debian package.
Check out the gradle-ospackage-plugin GitHub page for details on how to use it.
Release management
There are a number of Nebula plugins that assist in the publishing and releasing of software, based on the needs of Netflix services.
nebula-publishing-plugin
The goal of this plugin is to make it dirt simple to publish your Java library to a Maven or Ivy repository without all of the boilerplate Gradle DSL.
Check out the nebula-publishing-plugin GitHub page for details on how to use it.
nebula-release-plugin
The goal of this plugin is to simplify a Semantic Versioning approach to releasing Gradle based builds.
Check out the nebula-release-plugin GitHub page for details on how to use it.
Miscellaneous
The Nebula team has built a variety of additional miscellaneous plugins over time, each with a unique purpose.
gradle-lint-plugin
The Gradle Lint plugin is a pluggable and configurable linter tool for identifying and reporting on patterns of misuse or deprecations in Gradle scripts and related files. It is inspired by the excellent ESLint tool for Javascript and by the formatting in NPM’s eslint-friendly-formatter package.
It assists a centralized build tools team in gently introducing and maintaining a standard build script style across their organization.
nebula-project-plugin
The goal of this project is to make it easy to set up a Java project the Netflix way. While it is tailored to Netflix’s view of project setup, the defaults are sane enough for most projects. Applying this plugin:
- adds a
*-javadoc.jarand a*-sources.jaras build outputs - applies the gradle-info-plugin
- applies the gradle-contacts-plugin
Check out the nebula-project-plugin page for details on how to use it.
gradle-contacts-plugin
A feature provided by Maven that is missing from Gradle is the <developers/> section, which denotes the contact information for the owners of the project. The purpose of the gradle-contacts-plugin is to provide comparable features to Gradle.
Check out the gradle-contacts-plugin GitHub page for details on how to use it.
nebula-clojure-plugin
An opinionated plugin that wraps the clojuresque gradle plugin, removing the Clojars logic.
Check out the nebula-clojure-plugin page for details on how to use it.
gradle-netflixoss-project-plugin
Gradle plugin to setup common needs for Netflix OSS projects
This plugin is to support projects in the NetflixOSS org (and it isn’t meant to be used elsewhere). It is at its essence just a combination of other plugins that are common to all NetflixOSS projects, with some additional configuration. The primary responsibilities is to:
- Provide release process
- Configure publishing
- Recommend license headers
This project could be used as an example of how a “project plugin” could work. A “project plugin” is a Gradle plugin that provides consistency across many projects, e.g. in a Github org or an enterprise.
Core Plugins
These plugins don’t provide any significant value by themselves, but generally are used with some other plugin or infrastructure component.
gradle-info-plugin
The goal of this plugin is to collect metadata about the environment where the Gradle build is being executed.
Check out the gradle-info-plugin GitHub page for details on how to use it.
nebula-gradle-interop
Kotlin library providing extensions to assist with Gradle iterop and backwards compatibility.
Check out the nebula-gradle-interop GitHub page.
nebula-test
The nebula-test plugin was extremely useful in ensuring we can easily test our plugins. However, Gradle has begun to integrate these concepts into Gradle core. As a result, we recommend using Gradle TestKit instead of nebula-test.
Project Status
This section breaks the Nebula projects down by status.
Active Projects
Active projects are stable, or receive frequent updates. Issues opened in an active project should be addressed in a reasonable time frame. We will keep these projects up-to-date with the latest Gradle releases and features.
| Project Name | Status |
|---|---|
| gradle-contacts-plugin | Active |
| gradle-info-plugin | Active |
| gradle-jakartaee-migration-plugin | Active |
| gradle-lint-plugin | Active |
| gradle-ospackage-plugin | Active |
| gradle-resolution-rules | Active |
| gradle-resolution-rules-plugin | Active |
| nebula-dependency-base-plugin | Active |
| nebula-gradle-interop | Active |
| nebula-hollow-plugin | Active |
| nebula-project-plugin | Active |
| nebula-publishing-plugin | Active |
| nebula-release-plugin | Active |
| nebula-test | Active |
| nebula-archrules-plugin | Active |
| nebula-archrules | Active |
Maintenance
Maintenance projects are stable, and may be used internally by Netflix, but are not receiving any new features. The projects have a more modern OSS alternative, or are made obsolete by built-in Gradle functionality. Bugfixes will be addressed if the bug is observed within Netflix, but may not be addressed otherwise.
| Project Name | Status |
|---|---|
| gradle-dependency-lock-plugin | Maintenance |
| nebula-clojure-plugin | Maintenance |
| nebula-dependencies-comparison | Maintenance |
| nebula-dependency-recommender-plugin | Maintenance |
| nebula-node-plugin | Maintenance |
Internal / Utility / Sample Projects
These projects are used by other Nebula projects, or exist only as an example of how to use Nebula plugins. These should not be used directly.
| Project Name |
|---|
| example-multiproject |
| gradle-nebula-integration |
| gradle-netflixoss-project-plugin |
| gradle-nothing-plugin |
| investigate-insight |
| nebula-jfrog-test |
| nebula-oss-publishing-plugin |
| nebula-plugin-plugin |
| nebula-plugins.github.io |
| nebula-sample-plugin |
Archived Projects
These projects are read-only in GitHub and will no longer receive any update.
| Project Name | EOL Date |
|---|---|
| buildscan-test | Aug 28, 2018 |
| ensure | Aug 21, 2018 |
| example-project | Nov 9, 2021 |
| gradle-aggregate-javadocs-plugin | Mar 1, 2021 |
| gradle-blacklist-plugin | Aug 21, 2018 |
| gradle-git-scm-plugin | Oct 20, 2023 |
| gradle-java-cross-compile-plugin | Sep 11, 2023 |
| gradle-metrics-plugin | Jan 15, 2021 |
| gradle-override-plugin | Nov 27, 2023 |
| gradle-rxjava-project-plugin | Sep 1, 2018 |
| gradle-scm-plugin | Oct 20, 2023 |
| gradle-stash-plugin | Sep 26, 2023 |
| gradle-warnings-plugin | Aug 21, 2018 |
| lazybones-nebula-plugin-template | Aug 14, 2018 |
| lock-experimental | Aug 21, 2018 |
| nebula-bintray-plugin | Feb 7, 2021 |
| nebula-blob-plugin | Aug 21, 2018 |
| nebula-core | Mar 1, 2021 |
| nebula-docker-plugin | Mar 1, 2021 |
| nebula-grails-plugin | Jul 29, 2022 |
| nebula-interactive | Aug 28, 2018 |
| nebula-kotlin-plugin | Nov 9, 2021 |
| nebula-ospackage-plugin | Aug 21, 2018 |
| gradle-extra-configurations-plugin | May 7, 2026 |