Jar依赖项编译时间和运行时

时间:2018-11-30 19:17:38

标签: java maven jar

如果默认情况下,当我生成jar应用程序时,不包括依赖项,这是否意味着用户应该下载我应用程序的所有依赖项才能使用它?

为什么在jar中包含依赖项不是默认设置?

我如何期望用户以所需的确切版本拥有/下载所有依赖项?

1 个答案:

答案 0 :(得分:0)

来自https://imagej.net/Uber-JAR

  

优势

     

单个JAR文件更易于部署。多个JAR文件的版本不匹配的可能性不大。构造Java类路径比较容易,因为只需要包含一个JAR。

     

缺点

     

每次需要更新软件版本时,都必须重新部署整个uber-JAR(例如,截至2015年5月,ImageJ为〜68 MB)。如果捆绑了单个JAR组件,则只需更新已更改的组件。这个问题与通过Java Web Start部署的Java应用程序特别相关,因为它会自动下载每个JAR依赖项的最新可用版本;在这种情况下,如果使用uber-JAR,您的应用程序启动时间将受到影响。

     

您不能只挑选包含所需功能的JAR,因此应用程序的内存可能会膨胀。

     

如果下游代码依赖于无阴影的uber-jar中嵌入的任何相同依赖项,则可能会在类路径上使用这些依赖项的多个副本遇到麻烦(例如,无阴影的uber-JAR的NoSuchMethodError)。您需要使用与uber-JAR捆绑在一起的版本的依赖关系。

     

如您所见,了解uber-JAR的使用将如何影响您的应用程序非常重要。特别是,使用单个组件JAR可以更好地服务Java应用程序,最好使用依赖关系管理平台(例如Maven或Ivy)对其进行管理。但是对于非Java应用程序,uber-JAR可能足以满足您的需求。

这基本上取决于用例。如果将jar用于其他应用程序的开发中,并且其依赖关系可能会不时更新,则可以使用普通的jar,但是如果要运行/部署jar,则最好使用uber /胖子。

相关问题