部署 WAR 还是“胖”JAR?

2022-09-01 21:01:08

我注意到很多项目(DropWizard,Grails等)开始接受“胖”JAR(使用像Jetty或Tomcat这样的嵌入式Web服务器)的概念,而不是传统的WAR部署。这两种方法都涉及单个JVM进程(即,无论将多少个VAR部署到Tomcat,它都是相同的JVM进程)。

在什么情况下,任何一种部署方法都优于另一种部署方法?


答案 1

以下是一些原因:

支持 JAR:

  1. 易于构建和部署。
  2. 像Jetty这样的嵌入式服务器易于操作。
  3. 应用程序对于用户来说很容易启动,并且它们也可以在他们的个人计算机上运行,因为它们是轻量级的。
  4. 与管理 Web 服务器相比,启动和停止应用程序所需的知识更少。

支持 WAR 或 EAR:

  1. 服务器将同时为多个Web应用程序提供部署,重新启动,安全性等功能。
  2. 也许一个单独的部署团队可以处理应用程序的启动和停止。
  3. 如果你的主管喜欢遵守规则,他们会很高兴地发现你没有违反规则。

话虽如此,您始终可以提供2或3种类型的可执行文件以满足所有需求。任何构建工具都使这变得简单。


答案 2

使用嵌入式Web服务器分发应用程序允许独立设置,只需调用即可运行它。java -jar application.jar

但是,可能有用户希望控制使用哪个Web服务器,或者希望将多个应用程序部署到单个Web服务器中(例如,为了防止端口冲突,特别是与端口80和8080)。在这种情况下,“胖”jar可能会导致问题或至少一些不需要的代码,从而导致更大的内存占用。

恕我直言,对于这两种情况,最好的方法是提供两个工件:一个“胖”罐子用于(更容易)的独立设置,另一个是仅用于应用程序的war/ear,用于那些想要在自己的容器中部署应用程序的人。


推荐