Gradle plugin for working with JS
JavaScript Groovy Shell Java
Pull request Compare This branch is 139 commits behind eriwen:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Gradle Javascript Plugin! Build Status

Aiming to be the simplest way to manage your Javascript in a build.

Quick Start

Wrangling your JS in a Gradle build is easy! Just add this to your build.gradle file:

// Pull the plugin from a Maven Repo
buildscript {
    repositories {
    dependencies {
        classpath 'com.eriwen:gradle-js-plugin:1.1'
// Invoke the plugin
apply plugin: 'js'

// Declare your sources
javascript.source {
    dev {
        js {
            srcDir jsSrcDir
            include "*.js"
            exclude "*.min.js"
    prod {
        js {
            srcDir jsSrcDir
            include "*.min.js"

// Specify a collection of files to be combined, then minified and finally GZip compressed.
task combinejs(type: com.eriwen.gradle.js.tasks.CombineJsTask) {
    if (env == 'prod') {
        source =
    } else {
        source =
    dest = file("${buildDir}/all.js")

task minifyjs(type: com.eriwen.gradle.js.tasks.MinifyJsTask) {
    source = combinejs
    dest = file("${buildDir}/all-min.js")
    closure {
        warningLevel = 'QUIET'

task gzipjs(type: com.eriwen.gradle.js.tasks.GzipJsTask) {
    source = minifyjs
    dest = file("${buildDir}/all-min.js")

Need more than 1 set of files generated? We'll have to declare our tasks a bit differently:

task jsDev(type: com.eriwen.gradle.js.tasks.CombineJsTask) {
    source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
    dest = file("${buildDir}/all-debug.js")

task jsProd(type: com.eriwen.gradle.js.tasks.CombineJsTask) {
    source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
    dest = file("${buildDir}/all.js")

JSHint support

task jshintjs(type: com.eriwen.gradle.js.tasks.JsHintTask) {
    source =
    dest = file("${buildDir}/jshint.out")

JSDoc 3 support

task jsdocjs(type: com.eriwen.gradle.js.tasks.JsDocTask) {
    source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
    destinationDir = file("${buildDir}/jsdoc")

props2Js support

task processProps(type: com.eriwen.gradle.js.tasks.Props2JsTask) {
    source = file("${projectDir}/src/test/resources/")
    dest = file("${buildDir}/props.jsonp")
    props {
        type = 'jsonp'
        functionName = 'fn'

Available Tasks and Options


  • source = Collection of file paths of files to merge
  • dest = File for combined output

minifyJs (Uses the Google Closure Compiler)

  • source = File to minify
  • dest = File for minified output
  • (Optional) closure.compilationLevel = 'WHITESPACE_ONLY', 'SIMPLE_OPTIMIZATIONS' (default), or 'ADVANCED_OPTIMIZATIONS' (are you hardcore?)
  • (Optional) closure.warningLevel = 'QUIET', 'DEFAULT' (default), or 'VERBOSE'
  • (Optional) closure.compilerOptions = CompilerOptions object
  • (Optional) closure.externs = FileCollection object


  • source = File to compress
  • dest = File for compressed output


  • source = Files to assess with JSHint
  • dest = File for JSHint output


  • source = Files to generate documentation for
  • destinationDir = Directory path to put JSDoc output
  • (Optional) options.options = []
JSDoc 3 options:
-t or --template <value> The name of the template to use. Default: the "default" template
-c or --configure <value> The path to the configuration file. Default: jsdoc __dirname + /conf.json
-e or --encoding <value> Assume this encoding when reading all source files. Default: utf-8
-T or --test Run all tests and quit.
-d or --destination <value> The path to the output folder. Use "console" to dump data to the console. Default: console
-p or --private Display symbols marked with the @private tag. Default: false.
-r or --recurse Recurse into subdirectories when scanning for source code files.
-h or --help Print this message and quit.
-X or --explain Dump all found doclet internals to console and quit.
-q or --query <value> Provide a querystring to define custom variable names/values to add to the options hash.
-u or --tutorials <value> Directory in which JSDoc should search for tutorials.


  • source = Properties file to process
  • dest = Destination file for output
  • props.type = One of: 'js', 'json', or 'jsonp'
  • (Optional) props.functionName = Function name to wrap JSONP

What, you want more? Tell me then!


This project is made possible due to the efforts of these fine people:

  • Eric Wendelin - Original author and maintainer
  • Luke Daley - Advice and improved project structure and testing
  • Josh Newman - AMD and CommonJS work
  • Martin Ziel - Allowing minifyJs task to accept multiple files as input

See Also

The Gradle CSS Plugin!