java - 从几个版本运行几个 jar,但具有相同的名称和相同的类名

标签 java jar websphere shared-libraries

我在 Websphere Application Server 上有 5 个共享库。

它们中的每一个都指向一个具有相同名称的不同 jar(例如 projectA.jar)。

所有 jar 都包含相同的类名(同一棵树),但是,jar 之间的类代码并不相同,因为它们中的每一个都是前任的新版本。

我这样做是因为我在应用服务器上有 5 个应用,每个应用都需要另一个版本的 projectA.jar。

是否可以将相同的 jar 放在同一个应用服务器中,具有相同的类,但内部代码不同?

最佳答案

没关系,只要您保持库和应用程序之间的分离,并且它们之间没有任何直接通信。如果您只将每个共享库与需要它的应用程序相关联,那么这些库将被添加到应用程序类加载器中,除非您正在执行一些非常规的操作,否则它们之间不应该有任何可见性。每个应用程序将从它自己的 projectA.jar 副本加载它自己的必要类副本。如果您有跨应用程序调用的东西,那确实会增加 ClassCastExceptions 和 Verify 或 LinkageErrors 的风险,但如果这只是五个完全独立的应用程序,您应该没问题。

我要指出的是,如果您没有充分保持分离(例如,您将库组合在一起,或者将多个库与一个应用相关联,或者将它们全部与服务器级共享库类加载器相关联),那么您可能有麻烦了。 Java 可以处理同名的多个类,但不能在单个类加载器中处理 - 如果您在单个应用程序中同时使用 1/projectA.jar 和 2/projectA.jar 中的同一个类,则无法实际使用它们类加载器或共享库。由于听起来您对每个应用程序的依赖关系有非常深入的了解,希望这对您来说不是一个高风险。

关于java - 从几个版本运行几个 jar,但具有相同的名称和相同的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50134091/

相关文章:

java - jar 文件和图像有问题

java - 无论如何,是否可以在程序启动时自动运行 Universal Gcode Sender 中的文件,而不必上传文件?

java - 使用 WSS4J 签署 SOAP 消息

java - 关于递归存储的二叉搜索树问题

java - 在 Intellij 中浏览外部 jar 的简单方法

java - 缺少资源异常 websphere 门户

java - 什么是网络空间?

java - java中如何删除单向链表中的重复元素?

java - 如何比较泛型值和对象

java - 为什么使用 equals() 方法时两个具有相同数据的对象不相等