部署WAR还是"胖"JAR?

Adj*_*ion 19 java deployment tomcat jvm war

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

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

wav*_*cle 14

以下是一些原因:

赞成JAR:

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

赞成WAR或EAR:

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

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


Tho*_*mas 7

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

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

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