Skip to content
Gradle plugin for working with JS
JavaScript Groovy Java
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
gradle Use the public method for constructing a SourceDirectorySet Aug 7, 2019
src Replace custom source set container with public container method Aug 9, 2019
.gitignore Ignore intellij test output Jun 5, 2016
.travis.yml Java 8 compatibility. Supersedes #102. Mar 18, 2016 Contributing guide Oct 25, 2012
LICENSE Update LICENSE to adhere to Apache licensing guidelines Dec 6, 2016 Updating links for Google Closure Compiler Jun 19, 2017
build.gradle Use the public method for constructing a SourceDirectorySet Aug 7, 2019
gradlew Update to Gradle 4.0 Jun 17, 2017
gradlew.bat Update Gradle wrapper to 3.2.1 Dec 6, 2016
issue12.gradle Adding example of workaround for issue 12 Jan 24, 2012
plugin.gradle Bump to 2.14.1 with backward compatibility fixes. Jun 5, 2016

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:

Gradle 2.1+

plugins {
  id "com.eriwen.gradle.js" version "2.14.1"

Gradle 2.0-

buildscript {
  repositories {
  dependencies {
    classpath "com.eriwen:gradle-js-plugin:1.12.1"

apply plugin: "com.eriwen.gradle.js"
// Declare your sources
javascript.source {
    dev {
        js {
            srcDir jsSrcDir
            include "*.js"
            exclude "*.min.js"
    prod {
        js {
            srcDir jsSrcDir
            include "*.min.js"

Combining Files (options)

// Configure the built-in task
combineJs {
    encoding = "UTF-8"
    source =
    dest = file("${buildDir}/all.js")

// Create new CombineJsTasks if you have multiple sets of JS files
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")

Minifying files with Google Closure Compiler (options)

minifyJs {
    source = combineJs
    dest = file("${buildDir}/all-min.js")
    sourceMap = file("${buildDir}/all.sourcemap.json")
    closure {
        warningLevel = 'QUIET'

GZip JS (options)

gzipJs {
    source = minifyjs
    dest = file("${buildDir}/all-min.js")

JSHint support (options)

jshint {
    source =
    dest = file("${buildDir}/jshint.out")
    reporter = 'checkstyle'
    jshint.options = [expr: "true", unused: "true"]

JSDoc 3 support (options)

jsdoc {
    source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
    destinationDir = file("${buildDir}/jsdoc")

props2js support (options)

props2js {
    source = file("${projectDir}/src/test/resources/")
    dest = file("${buildDir}/props.jsonp")
    props {
        type = 'jsonp'
        functionName = 'fn'

require.js via r.js (options)

requireJs {
    source =
    dest = file("${buildDir}/out.js")
    requirejs.buildprofile = new File("src/main/resources/requirejs-config.js")

Built-in 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) sourcemap = Source map file
  • (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
  • (Optional) reporter = Only 'checkstyle' supported right now. Defaults to plain JSHint output.
  • (Optional) ignoreExitCode = Fail build if false and jshint finds problems. Default is true.
  • (Optional) outputToStdOut = true will output to STDOUT instead of file. Default is false.
  • (Optional) jshint.options = Map of options (e.g. [expr: "true", unused: "true"])
  • (Optional) jshint.predef = Map of predefined globals so JSHint doesn't complain about them


  • 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


  • source = Source JS files
  • dest = Output JS file
  • (Must declare this or requirejs.options) requirejs.buildprofile = File reference for config example
  • requirejs.options = Map of options require.js docs
  • (Optional) ignoreExitCode = Fail build if false and require.js did not run successfully. Default is false.
  • (Optional) requirejs.impl = r.js implementation file. Version 2.1.8 is provided within this plugin. Specifying this option allows users to specify a version of the require optimizer of their own choosing

What, you want more? Tell me!


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
  • Joe Fitzgerald - JSHint and RequireJS features
  • levsa - JSHint predef and checkstyle reporter
  • Martin Snyder - requireJs impl option
  • Aaron Arnett - Remove explicit MavenCentral dependency
  • sv99 - Improve Gradle version compatibility

See Also

The Gradle CSS Plugin!

You can’t perform that action at this time.