如果JAR-1中有一个com.app.A类加载到JVM中,那么我们如何在运行时从另一个JAR-2中加载同一个类com.app.A的新版本?
有哪些不同的方法可以做到这一点?
发布于 2016-08-18 23:19:21
一种方法是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作为依赖项时,它可以指定所需的版本。
您可以在here中找到一些流行的OSGi实现。
发布于 2016-08-18 23:19:48
您有两个选择:
First:你可以这样做,如下所示:
Java ClassLoader: load same class twice
Second:您可以手动尝试将旧的*.class替换为新的。如果你做了重大的改变,你可以捕捉到很多异常,比如添加方法等。我改变了一些日志记录,做了一些内部方法重构,这对我很有效。
https://stackoverflow.com/questions/39021749
复制相似问题