如何在运行时加载相同java类的新版本?

时间:2016-08-18 15:10:53

标签: java

如果JAR-1中有一个类com.app.A加载到JVM中,那么我们如何在运行时从另一个JAR-2加载同一个类com.app.A的新版本?

有哪些不同的方法?

- 作者Abhijit

2 个答案:

答案 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替换为新版本。如果您进行了重大更改,例如添加了方法等,您可以捕获大量异常。我更改了一些日志记录,进行了一些内部方法重构,它对我有用。