I have seen programs like http://one-jar.sourceforge.net/ and http://fjep.sourceforge.net/index.html promote rolling your application jar and any dependencies into a single, executable jar.
What are the main reasons for/against doing this?
For:
Against:
So generally, it's really a great way for quick prototyping, but can get in a way if used in a bigger project.
One legitimate reason that I've seen in the workplace is due to the fact that a vendor provides hotfix jars that need to precede the original version in the classpath.
However, this application is launched via java webstart (jnlp) and as of java version 6, the order of the jar file dependencies is no longer guaranteed.
Therefore the only way to ensure that the duplicated class files are in the correct sequence is to re-package them into an uber jar, retaining the latest patched class files and discarding older duplicates.
Redistribution licenses applicable to dependencies is one major reason against building a "uber" jar. When one creates a "uber" jar, distribution of any dependencies occurs, via distribution of the "uber" jar. And in regions, where case laws do not cover this scenario adequately, one might open themselves up for liability.
Additionally, some commercially obtained dependencies might prohibit repackaging of dependencies, especially if the original distribution is not conserved.
PS: This is not legal advice. Anyone reading this and depending on this for undertaking business decisions, should be consulting a lawyer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With