jar(war)压缩的优点是什么?

时间:2014-03-07 14:29:57

标签: java spring maven jar compression

如果您愿意,可以跳过文字墙并直接回答下面列出的问题。

某些背景:

我目前正在大规模,高度模块化的Spring应用程序上做一些工作。该应用程序由多个独立的Maven项目组成,这些项目是单独构建的。在编译整个应用程序时,这些项目作为依赖项被拉入并叠加到生成的“超级WAR”文件中。

问题:

前一段中描述的构建过程(很快)效果很好,但是非常慢,即使已经编译了所有依赖项并且可以从本地maven存储库获取。

一些简单的测试表明,当完全关闭jar压缩时,'super WAR'的构建时间减少了一半,但代价是文件大小相对较小(约10%)。

实际上,这并不奇怪,因为构建需要构建/压缩所有依赖项,然后再解压缩,覆盖,然后再次压缩(作为一个巨大的统一战争文件)。

除此之外,很少有“子项目”是纯Web应用程序,它们根本不包含需要编译(或压缩)的Java代码(仅限静态资源)。

问题:

  • jar(war,really)压缩有什么好处,除了(可忽略的)减小文件大小?

  • 对于Java EE或Spring Web应用程序,在完全关闭压缩时是否会引入其他(性能)问题?我认为它有可能帮助构建时间和JVM启动。

欢迎任何关于如何更有效地处理非Java应用程序的构建过程的建议。我已经考虑将它们捆绑为资源,但我不确定如何实现这一目标,同时确保它们仍然可以作为独立的战争文件构建。

1 个答案:

答案 0 :(得分:1)

除了有时可以忽略不计的文件大小减少以及只需管理一个文件而不是整个目录树的简单性之外,还有一些优点:

  • 缩短复制时间,根据这个答案:https://superuser.com/a/360532/145340我也可以通过个人经验来支持这一点,复制或移动许多小文件要比复制或移动同样大的单个文件慢得多。
  • 可移植性:明确定义了JAR文件格式,不会留下不兼容的实现空间。
  • 安全性:您可以对JAR文件的内容进行数字签名,确保内容的完整性和真实性。
  • 包装密封:实施版本一致性,因为必须在同一个JAR文件中找到包中定义的所有类。
  • 包版本控制:保存类似供应商和版本信息的数据。