部署WAR还是“胖”JAR?

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

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

以下是一些原因:

赞成JAR:

  1. 易于构建和部署。
  2. 像Jetty这样的嵌入式服务器易于操作。
  3. 用户可以轻松启动应用程序,也可以在个人计算机上运行,​​因为它们很轻便。
  4. 启动和停止应用程序所需的知识少于管理Web服务器。

赞成WAR或EAR:

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

话虽如此,您始终可以提供2或3种类型的可执行文件,以满足所有需求。 任何构建工具都可以轻松实现。

使用嵌入式Web服务器分发应用程序允许独立设置并通过调用java -jar application.jar运行它。

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

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

我正在考虑用户的观点。 您可以这个包含自己的jar 包装在.exe或.dmg中,然后安装它而无需有关于如何部署的其他说明。 此外,由于您仅为特定服务器进行部署,因此您可以利用该特定服务器