如何通过将其写入单个位置来调用许多WAR文件的通用应用程序



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

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

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

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

如果是,如何做到这一点?

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

谢谢

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

来自 Tomcat 6 类加载器操作指南

  Bootstrap
      |
   System
      |
   Common
   /        

Webapp1 Webapp2 ...

另请查看共享库文件。

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

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

注意:

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

最新更新