部署WAR还是“胖”JAR?

时间:2014-04-15 16:41:32

标签: java tomcat deployment jvm war

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

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

3 个答案:

答案 0 :(得分:14)

以下是一些原因:

支持JAR:

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

    1. 服务器将同时为多个Web应用程序提供部署,重启,安全等功能。
    2. 也许一个单独的部署团队可以处理应用程序的启动和停止。
    3. 如果您的主管喜欢遵守规则,他们会很高兴发现您没有违反规定。
    4. 话虽如此,您始终可以提供2种或3种类型的可执行文件以满足所有需求。任何构建工具都可以轻松实现。

答案 1 :(得分:7)

通过嵌入式网络服务器分发应用程序,只需调用java -jar application.jar即可进行独立设置和运行。

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

恕我直言,这两种情况的最佳方法是提供两种文物:a" fat" jar用于(更简单)独立设置和仅应用程序的战争/耳朵,适用于那些想要在自己的容器中部署应用程序的人。

答案 2 :(得分:4)

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