Web applications 辩论:在战争中添加第三方库是个好主意吗?

Web applications 辩论:在战争中添加第三方库是个好主意吗?,web-applications,jakarta-ee,jar,package,Web Applications,Jakarta Ee,Jar,Package,我们正在进行辩论 a。组装web应用程序的“标准”方式。 使用我们的所有应用程序工件创建一场战争,所有其他组件(如hibernate和memcached等)都部署在tomcat/shared/lib区域 b。创建一场巨大的战争,在tomcat/shared/lib中包含所有内容,而不包含任何内容 a的优点-它使事情模块化,战争规模小。 对共享/lib的依赖性的缺点必须特别通过部署过程来管理 b的优点-所有依赖项都由构建过程控制,消除任何错误空间。 b-War的缺点真的,真的很大。如果要通过网络部

我们正在进行辩论

a。组装web应用程序的“标准”方式。 使用我们的所有应用程序工件创建一场战争,所有其他组件(如hibernate和memcached等)都部署在tomcat/shared/lib区域

b。创建一场巨大的战争,在tomcat/shared/lib中包含所有内容,而不包含任何内容

a的优点-它使事情模块化,战争规模小。 对共享/lib的依赖性的缺点必须特别通过部署过程来管理

b的优点-所有依赖项都由构建过程控制,消除任何错误空间。 b-War的缺点真的,真的很大。如果要通过网络部署到大型服务器场,则可能会产生影响


想知道其他人对此有什么想法。

事实上,我认为B是“标准”方式:-)

我几乎总是选择B。对于我们的客户来说,这更简单——他们中的许多人不具备管理java应用程序服务器的技能——他们只是把战争扔到我告诉他们的地方,一切都正常

它也适用于我们的构建和部署-WAR是使用maven构建的,因此包含了所有必要的依赖项,还可以使用cargo插件部署到我们的QA应用服务器

当您有几个需要hibernate或其他依赖项但版本不同的Web应用程序时,它还可以避免“战争地狱”


只有当我完全控制应用服务器,并且每个webapp复制公共库的开销变得非常大,或者我能够确保所有应用都使用相同版本的依赖项进行测试时,我才会选择一个。然后,我知道依赖项可以安全地移动到应用服务器的共享区域。

事实上,我认为B是“标准”方式:-)

我几乎总是选择B。对于我们的客户来说,这更简单——他们中的许多人不具备管理java应用程序服务器的技能——他们只是把战争扔到我告诉他们的地方,一切都正常

它也适用于我们的构建和部署-WAR是使用maven构建的,因此包含了所有必要的依赖项,还可以使用cargo插件部署到我们的QA应用服务器

当您有几个需要hibernate或其他依赖项但版本不同的Web应用程序时,它还可以避免“战争地狱”


只有当我完全控制应用服务器,并且每个webapp复制公共库的开销变得非常大,或者我能够确保所有应用都使用相同版本的依赖项进行测试时,我才会选择一个。然后,我知道依赖项可以安全地移动到应用服务器的共享区域。

很有趣。我们完全控制着服务器。你的观点很好,但是如果你想避免在不同的webapp中使用同一组件的多个版本,那又如何呢?从运营/管理的角度来看,这不是一个理想的目标吗?我经常发现多个版本的XML解析器等,除此之外没有其他原因。我同意你的看法-如果你控制着应用程序和服务器,那么就努力在第三方库的版本上实现融合。我使用maven,这对我很有帮助。即便如此,我认为这是一个版本管理问题,而不是部署问题。所有应用程序都使用相同版本的lib进行了测试,这意味着lib可以共享,但版本管理必须首先为共享lib铺平道路。是的,我同意。我们使用Maven来管理它。但是有人认为应该转向一场战争,我们正在争论是否值得改变,是否有其他人可能已经看到的好处。我们完全控制着服务器。你的观点很好,但是如果你想避免在不同的webapp中使用同一组件的多个版本,那又如何呢?从运营/管理的角度来看,这不是一个理想的目标吗?我经常发现多个版本的XML解析器等,除此之外没有其他原因。我同意你的看法-如果你控制着应用程序和服务器,那么就努力在第三方库的版本上实现融合。我使用maven,这对我很有帮助。即便如此,我认为这是一个版本管理问题,而不是部署问题。所有应用程序都使用相同版本的lib进行了测试,这意味着lib可以共享,但版本管理必须首先为共享lib铺平道路。是的,我同意。我们使用Maven来管理它。但有人认为应该转向一场战争,我们正在争论是否值得改变,是否有其他人可能看到的好处。