Search code examples
javagradleexecutable-jargradle-pluginfatjar

How do I create an executable fat JAR with Gradle with implementation dependencies?


I've got a simple project in Gradle 4.6 and would like to make an executable JAR of it. I've tried shadow, gradle-fatjar-plugin, gradle-one-jar, spring-boot-gradle-plugin plugins but neither of them adds my dependencies declared as implementation (I don't have any compile ones). It works with compile e.g. for gradle-one-jar plugin but I would like to have implementation dependencies.


Solution

  • You can use the following code.

    jar {
        manifest {
            attributes(
                    'Main-Class': 'com.package.YourClass'
            )
        }
        from {
            configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        }
     }
    

    Be sure to replace com.package.YourClass with the fully qualified class name containing static void main( String args[] ).

    This will pack the runtime dependencies. Check the docs if you need more info.