Java 如何使用单独的类装入器并在同一JVM中运行?(OSGI)

Java 如何使用单独的类装入器并在同一JVM中运行?(OSGI),java,jvm,osgi,classloader,Java,Jvm,Osgi,Classloader,我已经读到OSGI对每个模块使用单独的类加载器,这允许模块使用不同版本的依赖项。。同时在同一JVM中运行所有模块 这是怎么回事?如果模块A使用依赖项的版本#1,模块B使用版本#2,那么如果模块A将依赖项类的实例作为方法参数传递给模块B,您不会遇到麻烦吗 如果模块B希望依赖类有一个不同的接口,我认为它会被阻塞。不一致的依赖可能会导致问题,你是对的。OSGi通过计算这些依赖项的传递闭包并确保在解析时不存在任何依赖项来避免这种情况 这允许您在具有内部/隐藏的私有依赖项的同时公开公共依赖项,并因此隐藏实

我已经读到OSGI对每个模块使用单独的类加载器,这允许模块使用不同版本的依赖项。。同时在同一JVM中运行所有模块

这是怎么回事?如果模块A使用依赖项的版本#1,模块B使用版本#2,那么如果模块A将依赖项类的实例作为方法参数传递给模块B,您不会遇到麻烦吗


如果模块B希望依赖类有一个不同的接口,我认为它会被阻塞。

不一致的依赖可能会导致问题,你是对的。OSGi通过计算这些依赖项的传递闭包并确保在解析时不存在任何依赖项来避免这种情况

这允许您在具有内部/隐藏的私有依赖项的同时公开公共依赖项,并因此隐藏实现依赖项以避免这种情况。好的是,所有这些都是在包解析时检查的,而不是隐藏运行时错误

具体地说,在您的示例中,如果A和B使用不兼容的接口,并且A依赖于B,那么A将无法解决依赖性错误。所以它甚至不能开始向它传递一个不兼容的类型