Tomcat中的第三方库最佳实践

| 我使用Tomcat托管我的Java Web和Web Service应用程序已经很长时间了。目前主要用于Spring和Grails应用程序。 最近在一个项目中,出现了关于如何在Tomcat生产环境中处理依赖项/库的讨论: 在我的项目中,我正在部署大型WAR文件,该文件包含WEB-INF / lib文件夹中应用程序的所有必需依赖项。我放入tomcat / lib文件夹的唯一内容是由tomcat管理的JDBC连接的JAR文件。 该客户在WebSphere方面拥有悠久的历史,并认为该容器应包含大多数必需的依赖项。因此,他们希望将使用过的框架或WebService API的JAR文件(例如Metro)放在tomcat / lib文件夹中,并拥有瘦的WAR文件。 我认为该解决方案的问题在于,如果您的应用程序需要tomcat / lib文件夹中已经包含的依赖关系的另一个版本,则可能会出现错误和奇怪的行为。 是否有一些最佳实践或官方文档讨论此问题?您对此有何看法?     
已邀请:
           是否有一些最佳实践或官方文档讨论此问题? 我怀疑您会找到官方文档(来自Tomcat开发人员/社区)来支持这一理论,尽管它是非常有效的。我必须在上一份工作中准备一个,以便可以跨多个J2EE容器部署应用程序的EAR文件。 有一件赞成的事情。您可以调出标题为“ WebSphere Application Server V6.1:类加载器问题确定”的IBM红皮书(已过时,鉴于WAS 7可用),它演示了如何在WebSphere中创建共享库。在WebSphere上,可以为需要不同版本的应用程序创建多个此类库。在Tomcat上,由于所有共享库都转储到$ CATALINA_HOME \\ lib中,您可能会是管理员的管理员,他们可能不知道什么是类加载器。 红皮书还提供了一些建议(用实用程序JAR替换实用程序文件,您就会得到答案):   不应放置实用程序文件的位置      在决定最适合放置您的位置   实用程序文件,对于   认识到这些文件不应该   包含在WebSphere中   应用程序服务器的环境。      例如:app_server_root / lib,   app_server_root / lib,/ ext *,   app_server_root / java(包括任何   子目录)或JVM类路径。      向其中添加实用程序文件   目录可能会导致以下问题   WebSphere运行时环境和   会导致意想不到的结果,   包括覆盖WebSphere   可能对   服务器的整体功能。     
        将依赖的jar打包到war文件中可能会产生更大的war文件,但是它提供了很多好处。大战争文件成为一个单独的,完整的部署单元。您可以获取该war文件并将其部署到开发人员桌面,客户接受环境和生产环境中,并确信war文件中您自己的代码正在引用所有依赖项的预期版本。 以我的经验,唯一将jar放入Tomcat的lib文件夹而不是war文件的时间是当您的代码按接口引用某个库时,并且直到部署时您才知道底层实现。例如,我有一个与JMS集成的项目,并且我知道必须支持消息传递基础结构的多个部署。某些环境需要使用ActiveMQ。使用Websphere MQ所需的其他环境。在那种情况下,我将JMS接口jar打包到war文件中,然后在部署时,将ActiveMQ或Websphere MQ实现jar放入tomcat / lib中。 当然,这意味着war文件不再是真正的完整部署单元。相反,部署是一个两步过程。这是一个权衡。我认为这比管理多个war文件构建变体要容易得多,每个变体都捆绑了一个不同的JMS提供程序jar。     
        我将购买可选软件包:http://docs.oracle.com/javase/6/docs/technotes/guides/extensions/index.html 脚步: 将您的代码,库打包到jar / war中。 在上面的MANIFEST.MF中声明扩展列表jar 在目标应用程序中引用了它们     

要回复问题请先登录注册