title: What are the differences between uberJar, fatJar and shadowJar in Gradle?
body: <p>I'm trying to understand when should I use which. I understand that they all assemble all the dependent classes, but how are they different from each other?</p>