【发布时间】:2011-12-14 16:30:04
【问题描述】:
通常,依赖项捆绑在 Java .war-packages 中。
但是,也可以将依赖项放入共享库中,以便为每个已部署的工件使用相同的依赖项。
问题:每种方法的优缺点是什么?您会在哪些情况下使用它们?
最大的要求是直观性/可维护性。我不太在意内存消耗、磁盘空间使用、带宽等,因为它们很便宜。
总之,各有几分:
在 WAR 中包含依赖项:
- “事实上的”方法(?)
- 易于维护(需要较少的配置和脚本等)
- 易于部署到应用服务器
- 每个模块都可以在库上定义特定版本
- 降低类加载错误的风险?
使用共享库:
- 减少内存消耗(微不足道?)
- WAR 部署可以访问相同的实例/变量等,因为它们共享类路径?听起来真的很糟糕吗? (它真的是这样工作的,还是它们在不同的上下文中运行,只使用相同的物理文件?)
- 使分发和部署变得更加困难,因为必须单独维护/部署依赖项
- 包体积更小(微不足道)
- 无需实际重新部署 WAR 应用程序即可升级依赖项(有什么好处,真的..)
当然,我们可以利用这两种方法的最佳方面,只提供公共库作为共享库,并在 WAR 中包含版本特性。但是,这会使维护工作加倍,感觉就像是禁忌。
目前我使用的是 Glassfish 3.1.1,但这个问题与应用服务器无关。
【问题讨论】:
-
有趣,看来我必须更详细地阅读常见问题解答。我想我提出了两个严格的问题——考虑到直观性/可维护性,询问什么是好的以及在什么情况下选择这两种方法。我一般没有问哪个更好——这取决于每个人自己根据给出的事实来决定。我什至给出了一个很好的扩展起点,实际上得到了建设性的答案。
标签: java deployment maven shared-libraries