0

我在 Tomcat webapps 目录中部署了许多应用程序,例如 A、B 和 C。

还有一个单独的实用程序项目说 Z 需要由所有 A、B 和 C 使用。

因此,一种方法是将 Z 项目的 .class 文件放在所有 A、B 和 C 项目的 classes 文件夹中。

是否可以将 Z 项目保留在那里,我们可以在 A、B 和 C 中为同一个 Z 项目提供参考,这样我们就不需要在所有 3 个项目中复制 jar 或 .class 文件。

如果是,该怎么做?

如果我问了愚蠢的问题,我很抱歉....但想消除疑问。

谢谢

4

1 回答 1

0

Web 应用程序被隔离到不同的类加载器中。这样,应用程序的类和库不会影响另一个应用程序。如果要在应用程序之间共享类或库,可以将它们放在公共类加载器中。

Tomcat 6 类加载器操作指南

  Bootstrap
      |
   System
      |
   Common
   /     \   

网络应用 1 网络应用 2 ...

还请查看Shared Library Files

也就是说,这不是最佳实践,因为它使 tomcat 本身的部署变得复杂;这意味着这.war并不是真正的“独立”;它可能会破坏 Web 应用程序的隔离模型(请参阅下面的注释)。

你所拥有的是构建问题。您可以使用构建系统(例如maven)来自动构建您的.war. 每个项目 A、B、C 都可以依赖于一个公共项目 D。当您构建 A、B 或 C 时,构建系统首先构建 D,然后根据您的需要打包所有内容。

笔记:

Web 应用程序应该被隔离,这样它们就不会共享对象。它们的对象图是完全不同的,每个应用程序都可以轻松地单独重新部署(和垃圾收集)。如果您将类放在一个通用的类加载器中,它可能会引入不需要的副作用。例如,如果共享类实现了单例,则意味着所有应用程序将共享单例对象的同一个实例,这与假定的隔离模型相冲突。当人们在某些特殊情况下明确希望在应用程序之间共享对象时,通常会以这种方式共享类。

于 2012-08-16T06:31:34.683 回答