Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Advantages/disadvantages of building one huge jar as opposed to several smaller?

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?

like image 587
brian_d Avatar asked Sep 28 '10 19:09

brian_d


3 Answers

For:

  • easier distribution,
  • makes classpath problem go away,
  • can be packaged even in Ms PowerPoint presentation as a clickable icon, probably OpenOffice also can handle it.

Against:

  • difficult packaging - sometimes you hit a corner case such as: how to package native extensions,
  • requires extra build step,
  • generates larger jars,
  • can violate library's license agreement,
  • kills the notion of library reuse,
  • makes updates and
  • debugging (because of extra classpath loader) more difficult.

So generally, it's really a great way for quick prototyping, but can get in a way if used in a bigger project.

like image 181
Rekin Avatar answered Oct 15 '22 12:10

Rekin


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.

like image 33
crowne Avatar answered Oct 15 '22 10:10

crowne


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.

like image 44
Vineet Reynolds Avatar answered Oct 15 '22 11:10

Vineet Reynolds