如果JAR-1中有一个类com.app.A加载到JVM中,那么我们如何在运行时从另一个JAR-2加载同一个类com.app.A的新版本?
有哪些不同的方法?
- 作者Abhijit
答案 0 :(得分:0)
一种方法是OSGi。您可以在OSGi环境中拥有同一捆绑包(jar)的多个版本。
假设我们在OSGi运行时中有JAR-1和JAR-2暴露相同的包但是这样的版本不同。
JAR-1 exports > org.home.code;version=1.0.0
JAR-2 exports > org.home.code;version=2.0.0
现在当其他jar需要org.home.code
作为依赖项时,它可以指定它需要哪个版本。
您可以找到一些流行的OSGi实现here。
答案 1 :(得分:0)
您有两种选择:
<强>首先:强> 你可以像这里描述的那样做:
Java ClassLoader: load same class twice
第二:您可以手动尝试将旧版*.class
替换为新版本。如果您进行了重大更改,例如添加了方法等,您可以捕获大量异常。我更改了一些日志记录,进行了一些内部方法重构,它对我有用。