Create a Fat JAR with Gradle

From NovaOrdis Knowledge Base
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

External

Internal

Overview

A "fat" JAR, or an uber-JAR, is a self-sufficient archive which contains both classes and dependencies needed to run an application. It is also configured with a Main-Class attribute. The Gradle Java plugin creates "thin" JARs. However, it can be configured to create a "fat" JAR. Specialized plugins are also available.

Creating a Fat JAR with the Jar Task from the Java Plugin

The following example reconfigures the default Jar task of the Java plugin to create a fat JAR.

dependencies {

    ...
    compile 'com.amazonaws:aws-lambda-java-core:1.2.0'
    compile 'com.googlecode.json-simple:json-simple:1.1.1'
    ...
}


jar {

    manifest {

        attributes "Main-Class": "com.example.Application"
    }
 
    from {

        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

Note that the Jar task configuration uses the "compile" configuration to decide what dependencies to include in the JAR. Come up with an equivalent setup for the 'implementation' configuration.

Separate Fat Jar Task by Extending the Jar Task of the Java Plugin

task customFatJar(type: Jar) {

    manifest {

        attributes 'Main-Class': 'com.example.Application'
    }

    baseName = 'uber-jar'

    from { 

        configurations.compile.collect { 
            it.isDirectory() ? it : zipTree(it) 
        } 
    }
    with jar
}

Creating a Fat JAR with the Shadow Plugin

TODO