Thufir
Thufir

Reputation: 8497

what's the gradle alternative to a fat JAR?

If transitive libs aren't packaged with the JAR task:

By default, jar task in gradle builds an executable jar file from your project source files. It will not contain any transitive libs that are needed for your program.

To the contrary, Netbeans does package JAR dependencies or transitive libs. Rather than a fat JAR how does gradle include libs?

plugins {
    id 'com.gradle.build-scan' version '1.8' 
    id 'java'
    id 'application'
}


mainClassName = 'net.bounceme.dur.mbaas.json.Main'


buildScan {
    licenseAgreementUrl = 'https://gradle.com/terms-of-service'
    licenseAgree = 'yes'
}

repositories {
    jcenter()
}


jar {
    manifest {
        attributes 'Main-Class': 'net.bounceme.dur.mbaas.json.Main'
    }
}

dependencies {
    //compile fileTree(dir: 'libs', include: ['*.jar'])
    runtime group: 'com.google.firebase', name: 'firebase-admin', version: '5.2.0'
    compile fileTree(dir: 'lib', include: '*.jar') 
}

in relation to another question: what's the "way" to package libs with the JAR task which doesn't result in a "fat JAR"?

Upvotes: 1

Views: 1734

Answers (1)

Rene Groeschke
Rene Groeschke

Reputation: 28653

When using the application plugin, all libraries used by the application (own jar or transitive libraries) are put in a libs folder when packaged as an app. then these libs are referenced in the shell or batch script as classpath when launching the app.

The easiest way to create a fatjar in gradle, is to use the shadow plugin available via the plugin portal. see https://plugins.gradle.org/plugin/com.github.johnrengelman.plugin-shadow for details

Upvotes: 2

Related Questions